Script .bat sous windows vers linux

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 =( !

3 réponses

Résumé de la discussion

La discussion porte sur la conversion d'un script batch Windows en Bash/Linux pour compter les phrases dans phrase.txt et en tirer une à afficher. Plusieurs intervenants rappellent que Batch et Bash utilisent des syntaxes différentes et qu'une traduction n'est pas possible, recommandant de réécrire le script en Bash et de consulter des ressources comme le guide ABS. Des solutions évoquées incluent l'utilisation de cat et for en Bash, l'évitement des variables d'environnement non supportées, et la gestion des erreurs fréquentes comme des expansions inappropriées et des syntaxes '%%i'. En pratique, l'adaptation nécessite de redéfinir la logique de tirage et d'indexation avec des constructions Bash natives et d'évaluer des alternatives comme head/tail ou des boucles while, afin d'éviter les pièges syntaxiques.

Bobot (l’IA à votre service)
  1. Contributeur
    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.
    1. salut

      Bonne aidé Giorgiolino et bon lien aussi ;)
  2. Contributeur
    hello
    sur Linuix, tu peux faire
    sort -R phrase.txt | head -1
    1. 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 ?
      1. 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
      2. 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 
      3. 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
      4. 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  '
      5. 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  '