Script .bat sous windows vers linux

Fermé
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 - 20 juin 2010 à 21:36
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 - 8 juil. 2010 à 15:08
Bonjour,
Comment modifier ce script :
@echo off 
setlocal enableDelayedExpansion 

::Nombre de phrases Total. 
set phraseTotal=0 
for /f %%i in ('type "phrase.txt"') do set /a phraseTotal+=1 


::Tirage au sort d'une des pharses. 
call set /a LignePhrase=%%random%%%%%%%phraseTotal% 


::Extraction de la phrase. 
set ligne=0 
for /f "delims=""" %%i in ('type "phrase.txt"') do ( 
if !ligne!==!LignePhrase! set phrase=%%i 
set /a ligne+=1 
) 


::Affichage de la phrase 
msg * %phrase%


Pour qu'il fonctionne sous linux ?
phrase.txt contient plusieurs phrases, et beaucoup d'autres.
Salut ça va ?
Bonjour a toi
Hello !!
BlaBlaBla
lorsque je met ces lignes de commande de fichiers batch dans un fichier sous linux et que je le rend exécutable, lorsque je le lance, linux de reconnait pas certaines commande.. (comme setlocal...)
Aidez moi svp =( !
A voir également:

3 réponses

Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
20 juin 2010 à 23:33
Bonjour,

Batch (Windows) et Bash (Linux) font référence à deux langages de scripting. Bien que les deux soient similaires, ils sont loin d'avoir une syntaxe identique.
Tu pourras trouver des informations concernant la conversion batch > bash
à cette adresse --> https://tldp.org/LDP/abs/html/dosbatch.html


Bon courage.
2
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
21 juin 2010 à 16:00
salut

Bonne aidé Giorgiolino et bon lien aussi ;)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 juin 2010 à 07:58
hello
sur Linuix, tu peux faire
sort -R phrase.txt | head -1
0
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 30
Modifié par mael9 le 21/06/2010 à 20:31
Merci tout le monde, je vais essayer !
EDIT :
Eux voilà ce que ça donne...
J'ai du me tromper je pense :
set +v      
exportlocal enableDelayedExpansion      

export phraseTotal=0      
for /f var in ('type "phrase.txt"') do export /a phraseTotal+=1      

source or . export /a LignePhrase=%%random%%%%%%%phraseTotal%      

export ligne=0      
for /f "delims=""" %%i in ('type "phrase.txt"') do (      
if !ligne!==!LignePhrase! set phrase=%%i      
export /a ligne+=1      
)      

::Affichage de la phrase      
msg * %phrase%

_______________________________________________________________________________

Et voici ce que j'ai tappé dans le terminal :
mael@mael:~$ chmod +x /home/mael/Desktop/chucknorris.bat     
mael@mael:~$ /home/mael/Desktop/chucknorris.bat 

Et ce qu'il me dit :
/home/mael/Desktop/chucknorris.bat: line 2: exportlocal : commande introuvable     
/home/mael/Desktop/chucknorris.bat: line 5: Erreur de syntaxe près du symbole inattendu « var »     
/home/mael/Desktop/chucknorris.bat: line 5: 'for /f var in ('type "phrase.txt"') do export /a phraseTotal+=1 '



Un nouveau code mais toujours la même erreur :
set +v   
setlocal enableDelayedExpansion   

export phraseTotal=0   
for /f var in ('type "phrase.txt"') do export /a phraseTotal+=1   

source or . export /a LignePhrase=$$random$$$$$$$phraseTotal$   

export ligne=0   
for /f "delims=""" $$i in ('type "phrase.txt"') do (   
if !ligne!==!LignePhrase! set phrase=$$i   
export /a ligne+=1   
)   

msg * $phrase$

_______________________________________________________________________________
Puis j'ai essayer avec ce converteur....
http://filegod.netfirms.com/Bat2Bash.html

qui m'a transformé le fichier d'origine en ceci :
set +vecho off  
exportlocal enablermayedExpansion  

export phraexportotal=0  
for /f %%i in ('cat "phrase.txt"') do export /a phraexportotal+=1  

. export /a LignePhrase=%%random%%%%%%%phraexportotal%  

export ligne=0  
for /f "rmims=""" %%i in ('cat "phrase.txt"') do (  
if !ligne!=!LignePhrase! export phrase=%%i  
export /a ligne+=1  
)  

msg * %phrase% 


puis dans le terminal, ça donne ceci :
mael@mael:~$ /home/mael/Desktop/chucknorris.bat 
/home/mael/Desktop/chucknorris.bat: line 1: set: +c : option non valable 
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...] 
/home/mael/Desktop/chucknorris.bat: line 2: exportlocal : commande introuvable 
 : commande introuvablechucknorris.bat: line 3:  
 » : identifiant non valablenorris.bat: line 4: export: «  
/home/mael/Desktop/chucknorris.bat: line 5: Erreur de syntaxe près du symbole inattendu « %%i » 
/home/mael/Desktop/chucknorris.bat: line 5: 'for /f %%i in ('cat "phrase.txt'') do export /a phraexportotal+=1 


____________________________________________________________________________
Faut-il que je mette :
#!/bin/sh

au début de mon fichier ?
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
21 juin 2010 à 23:10
Re, salut

mael9 dit :
Faut-il que je mette :

#!/bin/sh


OUI,
il ya des fautes dans votre code :

il n ya pas de /F dans la commande for et aussi la commande type , il faut la remplacer par cat
0
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 30
Modifié par mael9 le 22/06/2010 à 07:21
OK, merci
Ceci :
#!/bin/sh 
set +vecho off  
exportlocal enablermayedExpansion  

export phraexportotal=0  
for cat %%i in ('cat "phrase.txt"') do export /a phraexportotal+=1  

. export /a LignePhrase=%%random%%%%%%%phraexportotal%  

export ligne=0  
for cat "rmims=""" %%i in ('cat "phrase.txt"') do (  
if !ligne!=!LignePhrase! export phrase=%%i  
export /a ligne+=1  
)  

msg * %phrase%  


Me donne cette erreur :
bash: /home/malounet/Desktop/chucknorris.bat : /bin/sh^M : mauvais interpréteur: Aucun fichier ou dossier de ce type 

Quel interpréteur dois-je mettre ?

et sans interpréteur :
voià ce que ça me donne :
malounet@Malounet:~$ /home/malounet/Desktop/chucknorris.bat 
/home/malounet/Desktop/chucknorris.bat: line 1: set: +c : option non valable 
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...] 
/home/malounet/Desktop/chucknorris.bat: line 2: exportlocal : commande introuvable 
 : commande introuvablechucknorris.bat: line 3:  
 » : identifiant non valablenorris.bat: line 4: export: «  
/home/malounet/Desktop/chucknorris.bat: line 5: Erreur de syntaxe près du symbole inattendu « %%i » 
/home/malounet/Desktop/chucknorris.bat: line 5: 'for cat %%i in ('cat "phrase.tx'"') do export /a phraexportotal+=1 
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
24 juin 2010 à 21:08
Re, bonjour

pour la commande set : ( il ya un espace entre set +v et echo off )
set +v echo off

pour interpréteur #!/bin/sh :

essayez avec #!/bin/bash
0
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 30
26 juin 2010 à 01:02
Merci,
Avec ceci :

#!/bin/bash 
set +v echo off
exportlocal enablermayedExpansion  

export phraexportotal=0  
for cat %%i in ('cat "phrase.txt"') do export /a phraexportotal+=1  

. export /a LignePhrase=%%random%%%%%%%phraexportotal%  

export ligne=0  
for cat "rmims=""" %%i in ('cat "phrase.txt"') do (  
if !ligne!=!LignePhrase! export phrase=%%i  
export /a ligne+=1  
)  

msg * %phrase% 


Puis en le lançant dans le terminal, j'obtiens ceci :
malounet@malounet-desktop:~$ /home/malounet/Bureau/test
/home/malounet/Bureau/test: line 3: exportlocal : commande introuvable
/home/malounet/Bureau/test: line 6: Erreur de syntaxe près du symbole inattendu « %%i »
/home/malounet/Bureau/test: line 6: 'for cat %%i in ('cat "phrase.txt"') do export /a phraexportotal+=1  '
0
mael9 Messages postés 373 Date d'inscription vendredi 15 août 2008 Statut Membre Dernière intervention 7 février 2018 30
26 juin 2010 à 11:44
PS : en séparant par un espace export et local, il n'y a plus que les deux erreurs suivantes :
/home/malounet/Bureau/test: line 6: Erreur de syntaxe près du symbole inattendu « %%i »
/home/malounet/Bureau/test: line 6: 'for cat %%i in ('cat "phrase.txt"') do export /a phraexportotal+=1  '
0