2011-11-27 21 views
15

¿Cuál es la diferencia real entre while y until?Diferencia entre "while" y "until" en Bash

Me gustaría saber si es posible hacer un bucle creciente con "hasta" y un bucle descendente con while.

porque vi que si hago esto

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

y esto

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

que funcionan bien.

Pero si hago lo contrario, por ejemplo:

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

el guión no termina.

¿Esto significa que no podemos hacer un ciclo inverso con un tiempo en bash?

Respuesta

29

while ejecuta el ciclo mientras que la condición es verdadera. until ejecuta el ciclo hasta la condición es verdadera (es decir, mientras que la condición es falsa).

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

+0

gracias! Ahora está claro ... – Kyrol

+1

¿Alguna vez alguien te ha dicho que no uses las palabras que estás definiendo en la definición?:) –

+0

para ser jovial, 'while' es un marcador de posición y puede ser cualquier combinación de cualquier conjunto de caracteres, como' wh! 13'; -O – gwillie

4

son opuestos:

bool b; 
while(b) = until(!b) 
3

BTW:

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

Esto no ejecutará siempre. El contador (20) no es inferior a 10 durante la primera evaluación de la condición de bucle por lo que terminará inmediatamente.

7

ciclo Mientras ejecuta el bloque de código (encerrado en hacer ... hacer) cuando la condición es verdadera y mantiene la ejecución de eso hasta que la condición sea falsa . Una vez que la condición se convierte en false, el ciclo while finaliza.

Hasta Loop ejecuta el bloque de código (encerrado en hacer ... hacer) cuando la condición es falsa y mantener la ejecución de eso hasta que la condición sea verdadera . Una vez que la condición se convierte en true, finaliza el ciclo hasta.

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

En la primera ocasión, la condición mencionada en el tiempo, es decir, [$ CONTADOR -lt 10], sostiene falsa, por lo que el bloque de código dentro del bucle while no funcionará en absoluto.