[SHELL/BASH] probleme boucle [Résolu/Fermé]

Signaler
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
-
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
-
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

20 réponses

Messages postés
237
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
19 juin 2009
20
if ($vChoix > 2) then echo "Erreur, choix incorrect ( 1 ou 2 )"
elseif echo "Entrez votre choix : "
read vChoix
Quelque chose comme ça
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
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
;-))
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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
Messages postés
237
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
19 juin 2009
20
-gt signifie greater than - plus grand que. Donc >
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
2
Ok merci
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
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.
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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 )
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
if [ $vChoix -gt 2 ] 
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
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)...
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
2
Merci bien pour toutes ces explications, je comprends maintenant :D
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
2
J'ai trouvé mon problème le "then" ne doit pas se trouver sur la même ligne que le "if"
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
Ou séparer les deux avec un point virgule (;) :
if [ ... ];then ...
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
2
Merci je vais regarder !
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
Quelle commande tapes-tu ?
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
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 !
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
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$
;-))
Messages postés
98
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
22 décembre 2011
2
Merci beaucoup ! :-)