[SHELL/BASH] probleme boucle

Résolu
Bonjour,

J'essaye de réaliser un menu pour mon script écrit en Shell/bash, cependant j'ai un problème avec une boucle :

echo "Entrez votre choix : "
read vChoix

while [ $vChoix > 2 ]
do echo "Erreur, choix incorrect ( 1 ou 2 )"
echo "Entrez votre choix : "
read vChoix
done

Je voudrais dire que tant que vChoix est supérieur à 2 "Erreur...".
il m'affiche toujours l'erreur même si je rentre la valeur 1
???

Pouvez vous m'aider svp ?

Cordialement Madmat59
Configuration: Linux
Epiphany 2.22

20 réponses

  1. if ($vChoix > 2) then echo "Erreur, choix incorrect ( 1 ou 2 )"
    elseif echo "Entrez votre choix : "
    read vChoix
    Quelque chose comme ça
    1. Modérateur
      Salut,
      #! /bin/sh
      
      #set -xv
      
      while :
      do
      echo "Entrez votre choix [1-2] : "
      read choix
      if [ "$choix" -gt 2 ]
      then
      echo "Erreur, choix incorrect ( 1 ou 2 )"
      continue
      else
      echo "Choix \"$choix\" correct."
      break
      fi
      done
      ;-))
      1. Merci,

        Pour vos réponses .

        jipicy : a quoi correspond la ligne commentée #set -xv ?

        et -gt ? c'est l'equivalent de >= ?

        Cordialement Madmat59
        1. Modérateur
          Le "#set -xv" est un paramètre que je mets toujours dans mes scripts (voir man bash et la commande set), en fait là il est commenté mais si on le décommente ça permet de d'exécuter le script en mode verbeux et ainsi voir les erreurs éventuelle, surtout au niveau de l'interprétation des variables.
          1. il me trouve des erreurs avec la solution :

            if [ $vChoix > 2 ]
            then
            echo "Erreur, choix incorrect ( 1 ou 2 )"
            else
            echo "Entrez votre choix : "
            read $vChoix
            fi

            resultat :

            1.Ajouter un serveur Windows
            2.Ajouter un serveur Linux

            Entrez votre choix :
            1
            Erreur, choix incorrect ( 1 ou 2 )
            1. Merci jipicy, ta solution fonctionne à merveille !

              while :
              do
              echo "Entrez votre choix [1-2] : "
              read vChoix
              if [ "$vChoix" -gt 2 ]
              then
              echo "Erreur, choix incorrect ( 1 ou 2 )"
              continue
              else
              echo "Choix \"$vChoix\" correct."
              break
              fi
              done

              Par contre je ne comprend pas pourquoi on ne met pas d'argument à WHILE, je ne savais même pas que c'etait possible
              cordialement Madmat59
              1. Modérateur
                Si il y a un argument le ":" (deux points) équivalent de "true" (on aurait pu écrire "while true").

                Tant que la condition est vraie on boucle.
                Si le choix est supérieur à 2 on "continue", sinon on sort (break)...
                1. Merci bien pour toutes ces explications, je comprends maintenant :D
                  1. J'ai encore un probleme sur un "if",
                    j'ai fais :

                    if [ $vChoix = 1 ] then
                    read -p 'Nom de la machine Windows : ' vNom
                    ...
                    else (donc vChoix=2)
                    read -p 'Nom de la machine Linux :' vNom
                    ...
                    fi

                    Entrez votre choix [1-2] :
                    1
                    Choix "1" correct.
                    ./essai.sh: line 76: syntax error near unexpected token `else'
                    ./essai.sh: line 76: `else'

                    J'ai toujours ce message d'erreur
                    1. J'ai trouvé mon problème le "then" ne doit pas se trouver sur la même ligne que le "if"
                      1. Modérateur
                        Ou séparer les deux avec un point virgule (;) :
                        if [ ... ];then ...
                    2. Merci pour ces précisions !

                      Est il possible d'éditer les fichiers à un certain endroit, je voudrais par exemple ajouter une ligne en plein milieu à côté de "define".

                      J'arrive à ajouter des commandes à la fin avec :

                      echo texte >> dd.cfg

                      mais je n'arrive pas à insérer à un certain endroit !

                      Cordialement Madmat59
                    3. J'ai trouvé ce qu'il me faut, il m'affiche bien le changement après execution de la commande. Cependant cette modification ne s'enregistre pas
                      1. Je fais un test sur un fichier txt

                        salut

                        au revoir

                        je voudrais ajouter mon texte à droite de au revoir : sed "/au revoir/i bye" texte2.txt
                        La il m'affiche le texte une ligne avant mais le changement ne s'enregistre pas !
                        1. Modérateur
                          ssh$ cat fichier
                          salut
                          
                          au revoir
                          
                          ssh$ sed 's/au revoir/& bye/' fichier
                          salut
                          
                          au revoir bye
                          
                           ssh$ cat fichier
                          salut
                          
                          au revoir
                          
                          ssh$ sed -i 's/au revoir/& bye/' fichier
                          
                          ssh$ cat fichier
                          salut
                          
                          au revoir bye
                          
                          ssh$
                          ;-))