Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

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.

À propos de l'équipe du forum.

#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)


PC1 perso (Xiaomi Air 13) : dualboot avec Archlinux/Xfce et Ubuntu 18.04LTS/Gnome
PC2 perso (Lenovo Legion Y520) : quadrupleboot avec Archlinux/Plasma, Ubuntu 18.10/Gnome, OpenSuSe Tumbleweed/Mate, Win10
PC3 pro : OpenSuSe Leap 15/Plasma
Besoin d'un script de post-install pour la 18.04 ? c'est ici : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344

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 sous Bionic 64 bits et portable avec Xenial 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.

Hors ligne

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

GammaDraconis

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

Merci à vous !


PC1 perso (Xiaomi Air 13) : dualboot avec Archlinux/Xfce et Ubuntu 18.04LTS/Gnome
PC2 perso (Lenovo Legion Y520) : quadrupleboot avec Archlinux/Plasma, Ubuntu 18.10/Gnome, OpenSuSe Tumbleweed/Mate, Win10
PC3 pro : OpenSuSe Leap 15/Plasma
Besoin d'un script de post-install pour la 18.04 ? c'est ici : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344

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