Cómo usar While Loop en Bash en Linux

27 feb 2021 3 min di lettura
Cómo usar While Loop en Bash en Linux
Indice dei contenuti

Introducción

Los bucles son uno de los conceptos fundamentales de los lenguajes de programación. Los bucles son útiles cuando desea ejecutar una serie de comandos varias veces hasta que se cumpla una determinada condición.

En lenguajes de secuencias de comandos como Bash, los bucles son útiles para automatizar tareas repetitivas. Hay 3 construcciones básicas de bucle en los scripts Bash, bucle for, bucle while y bucle hasta que.

Este tutorial explica los conceptos básicos de los bucles while en Bash y las declaraciones break y continue para cambiar el flujo de un bucle.

Bash While Loop

El ciclo while se usa para ejecutar un conjunto de comandos dado un número desconocido de veces, siempre que la condición especificada sea verdadera.

El bucle Bash while tiene la siguiente forma:

while [CONDITION]
 do
 [COMMANDS]
 done

La condición se evalúa antes de ejecutar los comandos. Si la condición se evalúa como verdadera, se ejecutan los comandos. De lo contrario, si la condición se evalúa como falsa, el ciclo se terminará y el control del programa se pasará al siguiente comando.

En el siguiente ejemplo, en cada iteración, el ciclo imprime el valor actual de la variable i aumenta la variable en uno.

i=0

 while [ $i -le 2 ]
 do
 echo Number: $i
 ((i++))
 done

El ciclo de repetición continúa hasta que i es menor o igual a dos. Producirá la siguiente salida:

Number: 0
 Number: 1
 Number: 2

Mientras que el bucle es infinito

Un ciclo infinito es un ciclo que se repite indefinidamente y nunca termina. Si la condición siempre se evalúa como verdadera, se obtiene un bucle infinito.

En el siguiente ejemplo, estamos usando el comando incorporado : que siempre devuelve verdadero para crear un bucle infinito. También puede usar el true o cualquier otra declaración que siempre devuelva true.

while:
 do
 echo "Press <CTRL+C> to exit."
 sleep 1
 done

El ciclo while anterior funcionará indefinidamente. Puede finalizar el ciclo presionando CTRL+C

Aquí hay un equivalente de una sola línea:

while:; do echo 'Press <CTRL+C> to exit.'; sleep 1; done

Leer un archivo línea por línea

Uno de los usos más comunes del bucle while es leer un archivo, flujo de datos o variable línea por línea.

En el siguiente ejemplo, el ciclo while leerá el /etc/passwd línea por línea e imprimirá cada línea.

file=/etc/passwd

 while read -r line; do
 echo $line
 done < "$file"

En lugar de verificar el ciclo while con una condición, estamos usando la redirección de entrada < "$file" para pasar un archivo a la read que es el comando que verifica el ciclo. El ciclo while se ejecutará hasta que se lea la última línea.

Al leer el archivo línea por línea, siempre use read con la -r para evitar que la barra invertida sea un carácter de escape.

De forma predeterminada, el read corta los espacios en blanco iniciales /finales (espacios y tabulaciones). Utilice la IFS= antes del read para evitar este comportamiento

file=/etc/passwd

 while IFS= read -r line; do
 echo $line
 done < "$file"

Declaraciones de romper y continuar

Las sentencias break y continue se pueden usar para controlar la ejecución del ciclo while.

Declaración de ruptura

La sentencia break termina el ciclo actual y pasa el control del programa al comando que sigue al ciclo terminado. Por lo general, se usa para terminar el ciclo cuando se cumple una determinada condición.

En el siguiente ejemplo, la ejecución del bucle se detendrá cuando el elemento iterado actual sea igual a 2.

i=0

 while [ $i -lt 5 ]
 do
 echo "Number: $i"
 ((i++))
 if [[ "$i" == '2' ]]; then
 break
 fi
 done

 echo 'All Done!'
Number: 0
 Number: 1
 All Done!

Continuar declaración

La instrucción continue sale de la iteración actual de un ciclo y pasa el control del programa a la siguiente iteración del ciclo.

A partir de entonces, una vez que el elemento iterado actual sea igual a 2, la declaración de continuación le permitirá volver al principio del ciclo y continuar con la siguiente iteración.

i=0

 while [ $i -lt 5 ]
 do
 ((i++))
 if [[ "$i" == '2' ]]; then
 continue
 fi
 echo "Number: $i"
 done

 echo 'All Done!'
Number: 1
 Number: 3
 Number: 4
 Number: 5
 All Done!

Conclusión

A estas alturas ya debería tener un buen conocimiento de cómo utilizar el bucle while de bash.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.