¿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.