Script shell - while / until

Résolu/Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 17 août 2017 à 19:11
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 18 août 2017 à 10:38
Bonjour!
Avec ce script...
while [ "$reponse" != 'oui' ]
do
read -p 'Dites oui : ' reponse
done

...j'ai voulu faire un test avec until, de manière à ce que la boucle continue jusqu'à ce que la réponse soit différente de oui. J'ai donc remplacé
while
par
until
.

Mais depuis, quand j'éxecute le script, il ne se passe rien. Pourquoi?!


1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 409
17 août 2017 à 18:59
Salut,

La réponse est dans ta question et ton raisonnement : de manière à ce que tant que l'on dit oui, ça continue.

tant que c'est pour
while

until
c'est jusqu'à ce que

until [ "$reponse" = 'oui' ]
do
        read -p 'Dites oui : ' reponse
done

0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
Modifié le 17 août 2017 à 19:10
Pardon, je voulais dire: "jusqu'à ce que la réponse soit différente de oui, la boucle continue."

donc j'ai fait:
until [ "$reponse" != 'oui' ]
do
read -p 'Dites oui : ' reponse
done

Mais rien ne se passe...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 409 > charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022
17 août 2017 à 19:12
Regardes bien mon exemple, il y a un caractère en moins ;-))
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
17 août 2017 à 21:19
Dans ton exemple, la boucle continue jusqu'à ce que l'utilisateur dise oui.

Ce que je cherche à faire est justement le contraire: je veux que la boucle continue jusqu'à ce que l'utilisateur dise autre chose que oui.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 409 > charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022
18 août 2017 à 07:55
Toute la subtilité tient dans le fait qu'une condition
while
exécute une boucle tant que la condition est vraie, et ce, jusqu'à ce que la condition devienne fausse.

Une condition
until
, c'est exactement le contraire, la boucle est exécutée tant que la condition est fausse, jusqu'à ce qu'elle devienne vraie.

Pour en revenir à ta condition
until [ "$reponse" != 'oui' ]
, ben la boucle n'est jamais exécutée, puisque dès le départ, la condition est vraie, la variable "$reponse" est vide, donc la condition
[ ' ' != 'oui' ]
étant respectée, on sort de la boucle et le script s'achève.

Si tu veux que ton script t'affiche quelque chose, il faut initialiser ta variable réponse à oui.

#! /bin/bash

reponse='oui'
until [ "$reponse" != 'oui' ]
do
        read -p 'Dites oui : ' reponse
done


La condition
until
est très peu utilisée. La plupart du temps c'est while qui est utilisée.
0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
18 août 2017 à 10:38
C'est précisément ce que je voulais savoir! Merci pour ta réponse et tes explications! :)
0