Script shell - while / until [Résolu]

charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 17 août 2017 à 18:45 - Dernière réponse : charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention
- 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?!


Afficher la suite 
65Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention

6 réponses

Répondre au sujet
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 17 août 2017 à 18:59
0
Utile
5
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

charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 17 août 2017 à 19:09
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...
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 17 août 2017 à 19:12
Regardes bien mon exemple, il y a un caractère en moins ;-))
charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 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.
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 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.
charline159 65 Messages postés lundi 14 août 2017Date d'inscription 28 octobre 2017 Dernière intervention - 18 août 2017 à 10:38
C'est précisément ce que je voulais savoir! Merci pour ta réponse et tes explications! :)
Commenter la réponse de zipe31