|
|
|
|
Bonjour,
Je débute dans le scripting shell et j'ai besoin d'un petit coup de main, ne trouvant pas d'exemple de ce que je souhaite faire.
Je crée un tableau de données comme ceci :
tableau = (val1 val2 ... valN)
Ca c'est ok.
Maintenant, je pose une question à l'utilisateur et récupère sa réponse à l'aide de l'instruction read.
Je voudrais faire un truc du genre :
tant que $reponse n'est pas dans la liste des valeurs de $tableau
- je pose la question
- je liste les réponses possibles contenues dans $tableau
- je récupère la réponse avec read
J'ai essayé un truc de ce genre :
until [ saisie in ${tableau[@]} ];
do
instructions
done
mais il me renvoie l'erreur suivante :
[: too many arguments
Pouvez vous m'aider svp ?
Merci d'avance
Salut,
#! /bin/sh
#set -xv
TAB=( A B C D E )
while :
clear
do
for i in ${TAB[@]}
do echo $i
done
read -p "Choisissez une valeur : " val
grep -q ${val} <<<${TAB[@]}
if [ "$?" = 1 ]
then
echo "Mauvais choix :-("
sleep 2
continue
else
echo "Bon choix, bye..."
break
fi
done;-))
$ man woman Il n'y a pas de page de manuel pour woman. |
Modifie comme ceci : TAB=( val1 val2 val3 val4 val5 )
while :
clear
do
for i in ${TAB[@]}
do echo "- $i"
done
read -p "Choisissez une valeur : " val
grep -q "\b${val}\b" <<<${TAB[@]}
if [ "$?" = 1 ]
then
echo "Mauvais choix :-("
sleep 2
continue
else
echo "Bon choix, bye..."
break
fi
done
$ man woman
Il n'y a pas de page de manuel pour woman.Pour le "if" il faut savoir que la variable "$?" contient le code retour de la dernière commande effectuée, donc soit "0" (zéro) pour vrai et "1" (un) pour faux. Donc on teste la valeur de ce code retour, et s'il est faux (1) on relance la boucle (continue). |
Merci, ca marche bien avec val1 etc comme valeur.
|
J'ai procédé autrement :
|