Usar el bucle "while" en la secuencia de comandos Bash para iterar sobre 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 mientras
bucle en Bash.
Introducción
El mientras
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 se ejecute correctamente (es decir, devuelva un estado 0. Cualquier comando en Linux devuelve 0 para el éxito y un entero distinto de cero para el fracaso).
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 ejecuta hasta que el último comando de la lista se ejecuta correctamente.
Sintaxis general
La sintaxis general para mientras
bucle en Bash es:
mientras haces
La lista de comandos de ejecución seguirá ejecutándose hasta que el último comando en la lista de comandos de condición se ejecute correctamente y salga con el estado 0. En la iteración, cuando falla el último comando de condición, el ciclo sale.
El usuario puede 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
no es igual a 10.
x = 0 mientras que [[$ x -ne 10]] 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
). Aquí, dado que estamos usando el -nordeste
operador (que significa "no es igual a"), el comando de prueba devuelve 0, es decir, éxito, si el valor de x no es 10, y devuelve un valor distinto de cero, es decir, falla si el valor de x es 10.
Luego, dentro del hacer hecho
bloque, imprimimos el valor de x y lo incrementamos. Una vez que el valor de x es 10, el comando de prueba devuelve un estado distinto de cero y el ciclo sale.
Nota: La variable de índice que se utilizará en el bucle while debe inicializarse antes del bucle while o en los comandos de condición, a diferencia del bucle 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 while echo "Lista de archivos:" ls -l [[$ z -ne 5]] do echo "Creando dir $ z ..." mkdir dir $ z ((z ++)) hecho
Primeros comandos echo "Lista de archivos:"
y ls -l
se ejecutará 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 el valor de z no sea 5, el comando de prueba devuelve el estado de éxito y, por lo tanto, el ciclo sigue funcionando. Los comandos de condición y los comandos ejecutados siguen ejecutándose en orden. Aquí, para cada iteración, primero ejecutará el comando echo y el comando ls en condición y luego el comando de tercera 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
declaración, para una salida condicional del bucle.
x = 0 mientras que [[$ x -ne 10]] hacer si [[$ x -eq 5]] romper fi echo $ x ((x ++)) hecho
El ciclo while anterior 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 satisface una condición particular.
x = 0 mientras que [[$ x -ne 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 mientras
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 mientras
bucle, similar a por
y hasta
los bucles son una característica importante en el script Bash. El ciclo while tiene un uso similar al ciclo hasta, excepto que se usa para ejecutar comandos / programas alternativos cuando un programa en particular tiene éxito. Esto a menudo encuentra su utilidad en scripts de red avanzados, scripts de mantenimiento del sistema, etc.