Bucle Bash 'Hasta': Tutorial y ejemplos

Usar el bucle "hasta" en un script Bash para recorrer los comandos.

Bash (Bourne Again Shell) es un símbolo del sistema de shell y un lenguaje de secuencias de comandos en los sistemas operativos GNU / Linux. Es el shell predeterminado para la mayoría de las distribuciones de Linux.

Como la mayoría de los lenguajes de secuencias de comandos, Bash proporciona sintaxis de bucle para repetir tareas similares varias veces. En este artículo, aprenderemos a utilizar el hasta bucle en Bash.

Introducción

El hasta El bucle en Bash se usa para ejecutar comando (s) (comandos ejecutados) varias veces en función de la salida de otro comando (s) (comandos de condición). Los comandos ejecutados seguirán ejecutándose hasta que el comando de condición siga fallando (es decir, devuelva un estado distinto de cero. Cualquier comando en Linux devuelve 0 para el éxito y un entero distinto de cero para el error). Esto es exactamente lo contrario de mientras bucle, en el que los comandos ejecutados continúan ejecutándose hasta que el comando de condición es exitoso.

Si hay varios comandos de condición, la declaración considera solo el estado del último comando de la lista, es decir, el ciclo se ejecutará hasta que el último comando de la lista siga fallando.

Sintaxis general

La sintaxis general para hasta bucle en Bash es:

hasta que esté hecho

La lista de comandos de ejecución se ejecutará hasta que falle el último comando de la lista de comandos de condición. Una vez que el último comando es exitoso, el ciclo sale.

Los usuarios pueden especificar cualquier archivo ejecutable en las listas de comandos. Pueden ser programas estándar de Linux o programas de usuario o scripts personalizados. Cada comando debe estar en una nueva línea o separado por un punto y coma en la misma línea.

Veamos algunos ejemplos.

Bucle hasta que una variable tiene un valor particular: El siguiente ciclo se ejecuta hasta el valor de la variable. X es 10.

x = 0 hasta que [[$ x -eq 10]] haga echo $ x ((x ++)) hecho

En cada iteración, verificamos si el valor de x es 10. El valor se verifica usando el prueba mando. [[ Expresión ]] es la sintaxis para el comando de prueba (ver prueba de hombre).

Luego, dentro del hacer hecho bloque, simplemente imprimimos el valor de x, y lo incrementamos. El ciclo sale una vez que el comando de condición es exitoso, es decir, cuando $ x es igual a 10.

Nota: La variable de índice que se utilizará en el ciclo "hasta" debe inicializarse antes del ciclo "hasta" o en los comandos de condición, a diferencia del ciclo for, que permite inicializar una variable implícitamente.

Con múltiples comandos de condición: El siguiente ciclo crea 5 directorios con el nombre dir0, dir1, ... dir4.

z = 0 hasta echo "Hola" echo "Adiós" [[$ z -eq 5]] do echo "Creando dir $ z ..." mkdir dir $ z ((z ++)) hecho

Los primeros comandos echo "Hola" y echo "Bye" se ejecutarán una vez por completo; su éxito o fracaso no tiene ningún impacto en la duración del ciclo.

Entonces se ejecutará el comando de prueba para verificar el valor de la variable z. Hasta que este comando siga fallando, es decir, hasta que el valor de z sea 5, los comandos de condición y los comandos ejecutados seguirán ejecutándose en orden. Aquí, para cada iteración, primero ejecutará los 2 comandos de eco en condición y luego el tercer comando de condición verifica el valor de z. Si no es 5, ingresa al ciclo y ejecuta los comandos dados.

Romper y continuar

Declaración de ruptura para salida condicional

También podemos usar la declaración condicional Si dentro del bucle. El Si la declaración se puede utilizar con un descanso una declaración, para una salida condicional del bucle.

x = 0 hasta [[$ x -eq 10]] hacer si [[$ x -eq 5]] romper fi echo $ x ((x ++)) hecho

El ciclo anterior hasta imprimirá números del 0 al 4. Luego, cuando el valor de i sea 5, saldrá del ciclo. Esto es de particular utilidad cuando se va a salir de un bucle cuando un comando da una salida específica.

Continuar declaración para omitir una iteración condicionalmente

Bash también tiene un Seguir declaración para omitir la parte restante de una iteración en un ciclo si se cumple una condición particular.

x = 0 hasta [[$ x -eq 10]] hacer si [[$ x -eq 5]] continuar fi echo $ x ((x ++)) hecho

El ciclo anterior imprimirá números del 0 al 10, excepto el 5, porque durante la iteración de x = 5 hay una instrucción continue, que omitirá el resto del código en el ciclo al principio con la iteración de x = 6.

Uso de bucles: secuencias de comandos y línea de comandos

Las sintaxis de bucle se pueden utilizar en el shell Bash directamente o desde un archivo de script de shell ejecutable. Similar a por y mientras bucles, una vez por hasta La sintaxis de bucle se ingresa en el shell, el shell continúa el indicador para permitir que el usuario continúe con los comandos que se ejecutarán en bucle.

O bien, el usuario puede guardar esto en un archivo de secuencia de comandos y ejecutar el archivo de secuencia de comandos.

El #! / bin / bash at the start especifica el intérprete que se utilizará cuando se ejecute el archivo. Aunque Bash es el shell más utilizado hoy en día, algunos usuarios prefieren shells como zsh, que debe especificarse en lugar de bash al comienzo de este archivo.

Para dar permisos de ejecución para este archivo, ejecute:

chmod + x test.sh

Por fin, para ejecutar el archivo, correr:

./test.sh

Conclusión

El hasta El bucle es otra característica importante en las secuencias de comandos Bash. Tiene particular importancia en scripts complejos cuando se espera que un determinado conjunto de programas devuelva el estado de falla y se deben ejecutar algunos otros comandos para registrar la falla, mostrar el error en detalle o simplemente ejecutar algunos programas alternativos.