Script shell - while / until

Résolu
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

  1. Contributeur
    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

    1. 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...
    2. Contributeur
      @charline159Regardes bien mon exemple, il y a un caractère en moins ;-))
    3. 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.
    4. Contributeur
      @charline159Toute 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.
    5. C'est précisément ce que je voulais savoir! Merci pour ta réponse et tes explications! :)