[SHELL/BASH] probleme boucle

Résolu
Madmat59 Messages postés 107 Statut Membre -  
Madmat59 Messages postés 107 Statut Membre -
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. FlorianWebmastering Messages postés 238 Date d'inscription   Statut Membre 20
     
    if ($vChoix > 2) then echo "Erreur, choix incorrect ( 1 ou 2 )"
    elseif echo "Entrez votre choix : "
    read vChoix
    Quelque chose comme ça
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    ;-))
    0
  3. Madmat59 Messages postés 107 Statut Membre 2
     
    Merci,

    Pour vos réponses .

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

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

    Cordialement Madmat59
    0
  4. FlorianWebmastering Messages postés 238 Date d'inscription   Statut Membre 20
     
    -gt signifie greater than - plus grand que. Donc >
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Madmat59 Messages postés 107 Statut Membre 2
     
    Ok merci
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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.
    0
  8. Madmat59 Messages postés 107 Statut Membre 2
     
    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 )
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    if [ $vChoix -gt 2 ] 
    0
  10. Madmat59 Messages postés 107 Statut Membre 2
     
    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
    0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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)...
    0
  12. Madmat59 Messages postés 107 Statut Membre 2
     
    Merci bien pour toutes ces explications, je comprends maintenant :D
    0
  13. Madmat59 Messages postés 107 Statut Membre 2
     
    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
    0
  14. Madmat59 Messages postés 107 Statut Membre 2
     
    J'ai trouvé mon problème le "then" ne doit pas se trouver sur la même ligne que le "if"
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Ou séparer les deux avec un point virgule (;) :
      if [ ... ];then ...
      0
  15. Madmat59 Messages postés 107 Statut Membre 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
    0
  16. Madmat59 Messages postés 107 Statut Membre 2
     
    Merci je vais regarder !
    0
  17. Madmat59 Messages postés 107 Statut Membre 2
     
    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
    0
  18. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Quelle commande tapes-tu ?
    0
  19. Madmat59 Messages postés 107 Statut Membre 2
     
    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 !
    0
  20. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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$
    ;-))
    0
  21. Madmat59 Messages postés 107 Statut Membre 2
     
    Merci beaucoup ! :-)
    0