Contenu | Rechercher | Menus

Annonce

Toute l'équipe d'ubuntu-fr vous souhaite un joyeux Noël et une bonne et heureuse année 2018.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 29/12/2017, à 15:16

GammaDraconis

Question bash : peux t'on raccourcir cette condtion avec while ?

Bonjour,

Pour les besoins d'un script bash, j'ai ceci comme condition :

while [ "$choix" != "0" ] && [ "$choix" != "1" ] && [ "$choix" != "2" ] && [ "$choix" != "3" ] && [ "$choix" != "4" ] && [ "$choix" != "5" ] && [ "$choix" != "6" ] && [ "$choix" != "7" ] && [ "$choix" != "8" ]
do
    read -p "Désolé, je ne comprend pas votre réponse, les seuls choix possibles sont les valeurs de 0 à 8 mais aucune autre ! " choix
    clear
done

Vous l'avez compris, l'utilisateur doit saisir obligatoirement 0 ou 1 ou 2 ou... jusqu'à 8 sinon ça lui repose la question tant qu'il n'a pas saisie la bonne valeur.

Cela fonctionne mais le soucis c'est que c'est trop long a écrire (imaginez si il y avait 20 valeur?), auriez vous une solution pour raccourcir au maximum la vérification des possibilités acceptés (par exemple avec un intervalle de valeur : if [0-8]....)

Merci d'avance pour votre réponse.

Dernière modification par GammaDraconis (Le 29/12/2017, à 15:17)

Hors ligne

#2 Le 29/12/2017, à 15:29

Watael

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

salut,

until ((0<=${choix:=-1} && $choix<=8)); do read choix; done

eval, c'est mal.

Hors ligne

#3 Le 29/12/2017, à 15:34

Nasman

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

Peut être avec les instructions switch, case et default ?


PC fixe et portable avec Precise 64 bits

Hors ligne

#4 Le 29/12/2017, à 15:56

Watael

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

Nasman a écrit :

Peut être avec les instructions switch, case et default ?

en bash ?


eval, c'est mal.

Hors ligne

#5 Le 29/12/2017, à 16:39

Hizoka

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

Salut,

while [[ ${choix} != [0-8] ]]
do
...
done

Hors ligne

#6 Le 29/12/2017, à 17:07

erresse

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

Watael a écrit :

salut,

until ((0<=${choix:=-1} && $choix<=8)); do read choix; done

Bonjour,
Pourquoi ce test bizarre et compliqué "(0<=${choix:=-1} ...)", plutôt que "(${choix}>=0 ...)" ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

En ligne

#7 Le 29/12/2017, à 17:09

GammaDraconis

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

Merci à vous !

Hors ligne

#8 Le 29/12/2017, à 19:03

Watael

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

erresse a écrit :

Pourquoi ce test bizarre et compliqué "(0<=${choix:=-1} ...)", plutôt que "(${choix}>=0 ...)" ?

${choix:=-1} parce que si choix n'existe pas, il est évalué à zéro.

+1: [[ ${choix} != [0-8] ]]
mais où sont les guillemets ? lol
encore un effort et les accolades disparaîtront aussi. wink

Dernière modification par Watael (Le 29/12/2017, à 19:05)


eval, c'est mal.

Hors ligne

#9 Le 29/12/2017, à 19:14

Hizoka

Re : Question bash : peux t'on raccourcir cette condtion avec while ?

certainement pas mon petit monsieur !
vive les accolades !!!! smile

Hors ligne