Problême Bash

Résolu
Bonjour à tous et désolé si je me suis tromper de topic !
Bon j'explique mon problême, je fais un rpg textuel si on veut mais j'ai un problême justement avec le script car j'essais de faire un "launcher" et donc voila:
echo "[premier, deuxieme]"
echo "Quel chapitre choisir ? "
read choix
case $choix in
*)	echo "vous avez choisis $choix"
	;;
esac


if $name = "premier "
then 
	cat/home/[mon_nom_^^]/Bureau/0.2.2/chapitre1.sh
	#ou je penser a un cd /home... et sh ch1.sh

if $name = "deuxieme"

voila et je n'arrive pas à faire le "if [...] = ouvre mon bidul"
donc je ne sais pas si vous m'avez compris car il est tard (pour moi vu que je n'ai pas dormi lol) et merci pour ce qui vont m'aider car je ne trouve pas de réponse sur internet
Bibifoot

5 réponses

Résumé de la discussion

Un launcher bash propose les choix [premier, deuxieme], lit le choix puis tente d'exécuter C1.sh ou C2.sh, mais des erreurs de syntaxe et des messages 'not found' surviennent. Des réponses suggèrent d'utiliser directement case ${choix} in premier) /home/${USER}/Bureau/0.2.2/C1.sh ;; deuxieme) /home/${USER}/Bureau/0.2.2/C2.sh ;; *) echo 'Le chapitre n'existe pas' ;; esac et d'appeler les scripts selon le choix. Certains conseils montrent un exemple fonctionnel utilisant un shebang, un choix via case et des chemins explicites, et évitent les erreurs liées au positionnement des commandes et aux retours chariot. En pratique, une version complète montre le code exact utilisant case ${choix} avec premier et deuxieme liés respectivement à C1.sh et C2.sh, et des messages d'erreur configurables pour les choix invalides.

Bobot (l’IA à votre service)
  1. Contributeur
    Salut,

    Tiens, je te laisse jeter un oeil à cette doc sur les tests, ainsi que sur les comparaisons de chaînes de caractères, notamment les
    if...then...else...fi
    ou encore les
    if...then...elif...then...else...fi
    et compagnie.

    Par contre pour ton exemple, il serait peut-être plus judicieux de faire ça dans ton
    case...esac
    directement, non ?

    case "${choix}" in
    premier)	/home/${USER}/Bureau/0.2.2/chapitre1.sh
    	;;
    deuxieme)	/home/${USER}/Bureau/0.2.2/chapitre2.sh
    	;;
    *)	echo "Mauvaise réponse."
            exit
    	;;
    esac


    ;-))
    1
    1. Ok merci beaucoup je test ça et je te dirais ^^
      0
      1. Alors je l'ai réadapter et ça donne ça
        victor@victor-Inspiron-N7010:~$ cd /home/victor/Bureau/0.2.2
        victor@victor-Inspiron-N7010:~/Bureau/0.2.2$ sh launcher1.1.sh 
        [premier, deuxieme]
        Quel chapitre choisir ? 
        : not found.sh: 3: launcher1.1.sh: 
        launcher1.1.sh: 5: launcher1.1.sh: Syntax error: word unexpected (expecting "in")
        victor@victor-Inspiron-N7010:~/Bureau/0.2.2$ 
        

        donc j'ai tester read choix avant le case $choix et ça à donner ceci:
        victor@victor-Inspiron-N7010:~$ cd /home/victor/Bureau/0.2.2 
        victor@victor-Inspiron-N7010:~/Bureau/0.2.2$ sh launcher1.1.sh 
        [premier, deuxieme]
        Quel chapitre choisir ? 
        : not found.sh: 3: launcher1.1.sh: 
        premier
        : bad variable nameread: choix
        launcher1.1.sh: 5: launcher1.1.sh: Syntax error: word unexpected (expecting "in")
        victor@victor-Inspiron-N7010:~/Bureau/0.2.2$ 

        donc autant dire que ça n'a rien fait ^^ (dans le premier post la dernière variable était name c'est moi qui me suis tromper c'était bien choix désolé)
        0
        1. Contributeur
          On peut voir ton code en entier s'il te plaît ?
          0
      2. Voici le code en entier:
        #!/bin/bash
        echo "[premier, deuxieme]"
        echo "Quel chapitre choisir ? "
        
        read choix
        case ${choix} in
        premier) /home/${USER}/Bureau/0.2.2/C1.sh
         ;;
        deuxieme) /home/${USER}/Bureau/0.2.2/C2.sh
         ;;
        *) echo "Le chapitre n'éxiste pas !"
                exit
         ;;
        esac
        
        0
        1. Contributeur
          Euh... je viens de tester chez moi et le script marche très bien ;-\

          Le
          ${USER}
          est censé TE représenter et donc les 2 scripts à lancer doivent se trouver dans ton espace personnel (/home/TOI/Bureau/0.2.2/), c'est bien le cas ?

          Les 2 scripts sont bien exécutables (
          chmod +x
          ) ?
          0
      3. Alors j'ai même renommer dans le script le ${USER} par mon nom pour voir si ca changer quelque chose mais non (l'espoir fait virvre :D) et oui c'est le bon répertoire et oui j'ai autoriser l'éxecution des deux scripts et voici ce qu'ils me mettent dans le terminal quand je le lance:
        Quel chapitre choisir ? 
        : not found.sh: 4: launcher1.1.sh:
        [j'ai rentré ceci: premier]
        : bad variable nameread: choix
        launcher1.1.sh: 6: launcher1.1.sh: Syntax error: word unexpected (expecting "in")
        (Ps. je viens de remarquer que le
         : bad variable nameread: [La variable en question]
        le fait sur d'autres scripts que j'ai fait donc bah si ça peut aider je ne sais pas ^^)
        0
        1. Contributeur
          Il y a quelque chose qui cloche dans tes messages d'erreurs ;-(
          Les numéros de lignes ne correspondent pas au script posté plus haut ;-\

          Quel système d'exploitation utilises-tu ?
          Quel shell ?
          Les scripts sont fait avec quel éditeur ?

          Avec le même script chez moi tout roule :

          $ ./foo.sh 
          [premier, deuxieme]
          Quel chapitre choisir ?
          premier
          Vous avez lancé le script C1.sh

          $ ./foo.sh
          [premier, deuxieme]
          Quel chapitre choisir ?
          deuxieme
          Vous avez lancé le script C2.sh

          Avec les scripts suivants :
          cat foo.sh
          #/bin/bash
          echo "[premier, deuxieme]"
          echo "Quel chapitre choisir ? "
          
          read choix
          case ${choix} in
          premier)	/home/${USER}/trash/C1.sh
          	;;
          deuxieme)	/home/${USER}/trash/C2.sh
          	;;
          *)	echo "Mauvaise réponse."
                  exit
          	;;
          esac


          cat C1.sh
          #/bin/bash
          echo "Vous avez lancé le script C1.sh"


          cat C2.sh
          #/bin/bash
          echo "Vous avez lancé le script C2.sh"
          0
        2. Alors j'utilise Ubuntu 14.04 LTS, en Shell j'utilise le Bash, bah comme un gros blaireau j'utilise Gedit mais de base quand je fais du Python j'utilise Geany mais ça ne marchais pas quand je faisait du shell et oui j'ai exactement la même chose que toi en script mais ça ne marche pas :'(
          0
        3. Contributeur
          Rajoute
          set -xv
          après le shebang, lance le script et rapporte ici la sortie complète.

          #/bin/bash
          set -xv
          echo "[premier, deuxieme]"
          echo "Quel chapitre choisir ? "
          [...]
          0
        4. Quand je fais ton truc ça me mets
          launcher1.1.sh: 2: set: Illegal option -
          mais surtout j'ai regardé nous avons EXACTEMENT le même script à la majuscule près et j'ai "Ctr-C/Ctrl-V" ton fichier et ça marche --'
          0
        5. Petite comparaison, le tiens:
          #/bin/bash
          echo "[premier, deuxieme]"
          echo "Quel chapitre choisir ? "
          
          read choix
          case ${choix} in
          premier)	/home/${USER}/trash/C1.sh
          	;;
          deuxieme)	/home/${USER}/trash/C2.sh
          	;;
          *)	echo "Mauvaise réponse."
                  exit
          	;;
          esac

          Le miens:
          #!/bin/bash
          echo "[premier, deuxieme]"
          echo "Quel chapitre choisir ? "
          
          read choix
          case ${choix} in
          premier)	/home/victor/Bureau/0.2.2/C1.sh
          	;;
          deuxieme)	/home/victor/Bureau/0.2.2/C2.sh
          	;;
          *)	echo "Ce chapitre n'éxiste pas..."
                  exit
          	;;
          esac
          
          0