web-dev-qa-db-fra.com

Différence entre "tandis que" et "jusqu'à" dans Bash

Quelle est la vraie différence entre while et until?

Je voudrais savoir s'il est possible de faire une boucle de plus en plus avec "jusqu'à" et une boucle descendante avec while.

Parce que j'ai vu que si je fais ça

COUNTER=0
     while [ $COUNTER -lt 10 ]; do
         echo The counter is $COUNTER
         let COUNTER+=1 
     done

et ça

COUNTER=20
     until [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

ils fonctionnent bien.

Mais si je fais le contraire, par exemple:

COUNTER=20
     while [ $COUNTER -lt 10 ]; do
         echo COUNTER $COUNTER
         let COUNTER-=1
     done

le script ne se termine pas.

Est-ce à dire que nous ne pouvons pas faire une boucle inverse avec un certain temps dans bash?

26
Kyrol

while exécute la boucle tandis que la condition est vraie. until exécute la boucle jusqu'à ce que la condition soit vraie (ie tandis que la condition est fausse).

Voir http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs .

38

While Loop exécute le bloc de code (inclus entre do ... done) lorsque la condition est true et continue de l'exécuter jusqu'à ce que la condition devienne fausse . Une fois que la condition devient fausse , la boucle while est terminée.

Jusqu'à la boucle exécute le bloc de code (inclus dans do ... done) lorsque la condition est false et continuez à l'exécuter jusqu'à ce que la condition devienne vraie . Une fois que la condition devient vraie , la boucle jusqu'à est terminée.

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done

À la toute première occasion, la condition mentionnée dans while, c'est-à-dire [$ COUNTER -lt 10] , est fausse, donc le bloc de code à l'intérieur de la boucle while ne s'exécutera pas du tout.

12
Mandar Shinde

Ils sont opposés:

bool b;
while(b) = until(!b)
6
Vladp

Btw:

COUNTER=20
while [ $COUNTER -lt 10 ]; do
    echo COUNTER $COUNTER
    let COUNTER-=1
done

Cela ne s'exécutera pas indéfiniment. Le compteur (20) n'est pas inférieur à 10 lors de la première évaluation de la condition de boucle, il se terminera donc immédiatement.

4
Vilas

Fondamentalement, les boucles while & until ne s'exécuteront que si la condition initiale est remplie, pensez aux boucles while tandis que, si la condition actuelle est remplie, alors cela fonctionnera. Cependant, jusqu'à ce que les boucles attendent que la condition soit remplie. Par exemple. Ce qui suit fonctionnera car 5 est inférieur à 10, le corps des boucles incrémente la valeur jusqu'à ce qu'il soit exactement dix, il se fermera.

index=5
until [ $index -gt 10 ]
do
  echo $index
  let index+=1
done

Cet exemple ne fonctionnerait pas, car 5 n'est pas initialement supérieur à 10, seulement pendant la boucle il devient plus grand.

index=5
while [ $index -gt 10 ]
do
  echo $index
  let index+=1
done
0
Remario