Cómo usar For Loop en Bash en Linux

27 feb 2021 4 min di lettura
Cómo usar For 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 repetidamente una serie de comandos 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 tres construcciones básicas de bucle en los scripts Bash, bucle for, bucle while y bucle hasta que.

En este tutorial, cubriremos los conceptos básicos del bucle for en Bash. También le mostraremos cómo usar las declaraciones break y continue para cambiar el flujo de un bucle.

Sintaxis

El bucle for recorre una lista de elementos y ejecuta el conjunto de comandos especificado.

El bucle Bash for tiene la siguiente forma:

for item in [LIST]
 do
 [COMMANDS]
 done

La lista puede ser una serie de cadenas separadas por espacios, un rango de números, la salida de un comando, una matriz, etc.

Pasa por las cuerdas

En el siguiente ejemplo, el bucle repetirá cada elemento en la lista de cadenas y la element se establecerá en el elemento actual.

for element in Hydrogen Helium Lithium Beryllium
 do
 echo "Element: $element"
 done

El bucle producirá la siguiente salida:

Element: Hydrogen
 Element: Helium
 Element: Lithium
 Element: Beryllium

Desplazarse por un rango de números

Puede utilizar la expresión de secuencia para especificar un rango de números o caracteres definiendo un punto inicial y final para el rango. La expresión toma la siguiente forma:

{START..END}

En el siguiente ejemplo, el ciclo repetirá todos los números del 0 al 3.

for i in {0..3}
 do
 echo "Number: $i"
 done
Number: 0
 Number: 1
 Number: 2
 Number: 3

A partir de Bash 4, también es posible especificar un incremento cuando se utilizan rangos. La expresión toma la siguiente forma:

{START..END..INCREMENT}
for i in {0..20..5}
 do
 echo "Number: $i"
 done
Number: 0
 Number: 5
 Number: 10
 Number: 15
 Number: 20

Repasa los elementos de la matriz.

También puede usar el bucle for para iterar sobre una matriz de elementos:

En el siguiente ejemplo, definimos una BOOKS y repetimos cada elemento de la matriz.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')

 for book in "${BOOKS[@]}"; do
 echo "Book: $book"
 done
Book: In Search of Lost Time
 Book: Don Quixote
 Book: Ulysses
 Book: The Great Gatsby

Bash para Loop C-Style

La sintaxis de estilo C tiene la siguiente forma:

for ((INITIALIZATION; TEST; STEP))
 do
 [COMMANDS]
 done

La INITIALIZATION se reproduce solo una vez cuando comienza el bucle. Luego, se evalúa la parte TEST Si es falso, el ciclo for ha terminado. Si el TEST es verdadero, se ejecutan los comandos dentro del cuerpo del bucle for y se actualiza la parte STEP

En el siguiente código, el ciclo comienza inicializando i = 0, por lo que antes de cada iteración verifica si i ≤ 10. Si es verdadero, imprima el valor actual de i y [variable de incremento] i en 1 ( i++ ); de lo contrario, el ciclo termina.

for ((i = 0 ; i <= 1000 ; i++)); do
 echo "Counter: $i"
 done

El bucle se repetirá 1001 veces y producirá la siguiente salida:

Counter: 0
 Counter: 1
 Counter: 2...
 Counter: 998
 Counter: 999
 Counter: 1000

Declaraciones de romper y continuar

Las sentencias break y continue se pueden utilizar para controlar la ejecución del bucle for.

Declaración de ruptura

La sentencia break finaliza el ciclo actual y pasa el control del programa a la sentencia que sigue a la sentencia terminada. Por lo general, se usa para terminar el ciclo cuando se cumple una determinada condición.

En el siguiente ejemplo, usamos la instrucción if para terminar la ejecución del ciclo una vez que el elemento iterado actual es igual a "Lithium".

for element in Hydrogen Helium Lithium Beryllium; do
 if [[ "$element" == 'Lithium' ]]; then
 break
 fi
 echo "Element: $element"
 done

 echo 'All Done!'
Element: Hydrogen
 Element: Helium
 All Done!

Declaración continuada

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.

En el siguiente ejemplo, estamos iterando a través de un rango de números y cuando el elemento iterado actual es igual a '2', la instrucción continue devolverá la ejecución al inicio del ciclo y continuará con la siguiente iteración.

for i in {1..5}; do
 if [[ "$i" == '2' ]]; then
 continue
 fi
 echo "Number: $i"
 done
Number: 1
 Number: 3
 Number: 4
 Number: 5

Ejemplos de Bash for Loop

El siguiente ejemplo muestra cómo usar el bucle Bash for para cambiar el nombre de todos los archivos en el directorio actual con un espacio en los nombres reemplazando el espacio para el subrayado.

for file in *\ *; do
 mv "$file" "${file///_}"
 done

Repasemos el código línea por línea:

  • La primera línea crea un bucle for y recorre una lista de todos los archivos con un espacio en su nombre. La expresión *\ * crea la lista.
  • La segunda línea se aplica a cada elemento de la lista y mueve el archivo a uno nuevo reemplazando el espacio con un guión bajo _. La parte ${file///_} usa la expansión de parámetros de shell para reemplazar un patrón dentro de un parámetro con una cadena.
  • done indica el final del segmento de bucle.

Cambiar la extensión del archivo

El siguiente ejemplo muestra cómo usar el bucle Bash for para cambiar el nombre de todos los archivos que terminan con.jpeg en el directorio actual reemplazando la extensión de archivo de.jpeg a.jpg.

for file in *.jpeg; do
 mv -- "$file" "${file%.jpeg}.jpg"
 done

Repasemos el código línea por línea:

  • La primera línea crea un bucle for y recorre una lista de todos los archivos que terminan en '.jpeg'.
  • La segunda línea se aplica a cada elemento de la lista y mueve el archivo a uno nuevo reemplazando ".jpeg" con ".jpg". ${file%.jpeg} para eliminar la parte '.jpeg' del nombre de archivo usando la expansión de parámetros de Shell
  • done indica el final del segmento de bucle.

Conclusión

A estas alturas, debería tener una buena idea de cómo usar bash for loop para desplazarse por las listas.

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.