Téléchargement
illégal
Posez votre question Signaler

[Shell]instruction while et tableau de valeurs [Résolu]

Shadow_49 11Messages postés 26 août 2008Date d'inscription - Dernière réponse le 16 juil. 2009 à 15:31
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
Lire la suite 

[Shell]instruction while et tableau de valeurs »

5 réponses
Réponse
+0
moins plus
Salut,

Une façon de faire :
#! /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
;-))
Ajouter un commentaire
Réponse
+0
moins plus
En effet cela marche mais en partie

Par exemple, j'ai dans mon tableau val1 et val2
si je ne saisis que va comme réponse il me dit que c'est bon quand même.

que veut dire la condition du if s'il te plais ? (je débute en shell je ne connais pas du tout)

Merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Merci, ca marche bien avec val1 etc comme valeur.
Maintenant (je vais parraître chiant !) j'ai comme valeur A4.6 et A4.6_64b (qui sont des versions de RH pour info) et si je ne met que AS4 ça marche alors que je ne l'ai pas dans mon tableau...

Une idée ?

Au passage, que veulent dire les \b et que veut dire le #? = 1 ?

Merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
J'ai procédé autrement :

available_versions="AS4.6 AS4.6_64b"
os_version="_"
validator="failed"

while [ ${os_version} = "_" ]; do
echo "Question 1 : "
echo "Quel version de RedHat souhaitez vous installer parmis : "

for version in ${available_versions}; do
echo " - $version"
done

echo "(respectez bien les majuscules)"

read os_version


for choice in ${available_versions}; do
if [ ${os_version} = $choice ]; then
validator="success"
break
else
validator="failed"
fi
done

if [ ${validator} = "failed" ]; then
os_version="_"
echo "La version demandée n'est pas disponible. Toutes les versions disponibles sont affichées dans la liste"
fi

done


Et ça marche pareil (même si c'est un peu plus long)
Ajouter un commentaire
Ce document intitulé « [Shell]instruction while et tableau de valeurs » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?