¿Cómo salir de un bucle en Bash?


150

Quiero escribir un script Bash para procesar texto, lo que puede requerir un ciclo while.

Por ejemplo, un ciclo while en C:

int done = 0;
while(1) {
  ...
  if(done) break;
}

Quiero escribir un script Bash equivalente a eso. Pero lo que solía usar y, como han demostrado todos los ejemplos clásicos que leí, es este:

while read something;
do
...
done

No ofrece ayuda sobre cómo hacerlo while(1){}y break;, que está bien definido y ampliamente utilizado en C, y no tengo que leer datos para stdin.

¿Alguien podría ayudarme con un Bash equivalente al código C anterior?

Respuestas:


189

No es tan diferente en bash.

done=0
while : ; do
  ...
  if [ "$done" -ne 0 ]; then
      break
  fi
done

:es el comando no-op; su estado de salida es siempre 0, por lo que el ciclo se ejecuta hasta que donese le da un valor distinto de cero.


Hay muchas formas de establecer y probar el valor de donepara salir del ciclo; el que muestro arriba debería funcionar en cualquier shell compatible con POSIX.


¿Está bien usarlo donecomo nombre de variable? Es una palabra clave de shell ... Al menos confusa.
Michael Dorst

59
while true ; do
    ...
    if [ something ]; then
        break
    fi
done
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.