Implementar el bucle for en Bash

Muhammad Husnain 30 enero 2023
  1. Bash for Bucle
  2. Sintaxis de bucle for de estilo C de Bash
  3. Sintaxis del estilo Foreach/For-in de Bash
  4. Definición de rangos y tamaño de salto en Bash for Loop
  5. Hacer el bucle for en Bash Prompt y abordar el problema delimitando el punto y coma ;
Implementar el bucle for en Bash

Este tutorial discutirá las formulaciones de secuencias de comandos de Bash disponibles para escribir un bucle for de Bash.

Primero, aprenderemos su sintaxis y conceptos básicos. Más adelante, aprenderemos sus diferentes tipos en el script Bash, como la notación de bucle for de estilo C y el estilo foreach o for-in.

Al final, concluiremos comentando el tema del punto y coma ; mientras hace el bucle for en el indicador de bash.

Bash for Bucle

Un bucle en un lenguaje de programación o secuencias de comandos es una estructura de control iterativa que se utiliza para ejecutar repetidamente una declaración o un conjunto de declaraciones hasta que no se cumple un determinado criterio.

El bucle for es la estructura de bucle que se utiliza especialmente cuando una(s) declaración(es) determinada(s) o un conjunto de comandos deben ejecutarse un número específico de veces. También podemos usar el bucle for en el indicador de bash y el script de Bash.

El script Bash proporciona dos sintaxis para escribir los bucles for. El primero se conoce como estilo C o bucle de tres expresiones, y es casi lo mismo que la formulación en lenguaje C para el bucle for.

La segunda formulación es una famosa construcción de estilo foreach o for-in, que también ha sido adoptada por muchos lenguajes de programación populares como PHP, Python, C#, C++11, Ruby y muchos otros.

Sintaxis de bucle for de estilo C de Bash

Este estilo usa tres expresiones como lenguaje C para especificar el número de iteraciones del bucle.

for (( initialization; condition; increment/decrement ))
do
	Shell command[s]
done

Ejemplo: supongamos que queremos escribir un script que pueda ayudarnos a imprimir una tabla de cualquier número proporcionado por el usuario. Podemos hacerlo usando el siguiente código.

#!/bin/bash
echo "Enter a Number: "
read number

for ((j=1;j<=10;j++))
do  
   echo "$number X $j = $((number*j))"
done

El código anterior toma un número del usuario e imprime su tabla hasta 10. Suponga que el usuario ingresa 5 como un número, la salida del programa será como:

Enter a Number:
5
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50

Sintaxis del estilo Foreach/For-in de Bash

Este tipo de bucle for espera una lista de valores/elementos y realiza una única iteración para cada elemento de la lista. La lista se puede proporcionar separando cada elemento en un solo espacio, o puede especificar un rango.

for Counter in 1 2 3 4 5 .. N
do
	1st statement
	2nd statement
	nth statement
done

Ejemplo: Imprimir Hello World cinco veces.

#!/bin/bash
for c in 1 2 4 5 6 
do
   echo "$c Hello World"
done

Producción :

1 Hello World
2 Hello World
4 Hello World
5 Hello World
6 Hello World

Tenga en cuenta el 3 que falta. Este número se pierde ya que el bucle itera solo por el número de elementos dados en la lista. Por tanto, a la variable c se le asigna primero un valor 1, y se realiza una sola iteración.

Después de eso, se asigna 2 a c, y se realiza la segunda iteración. Posteriormente, el siguiente valor inmediato en la lista (es decir, 4) se asigna a la c, y el proceso continúa hasta que finaliza toda la lista.

Nota
Los elementos de la lista anterior pueden ser el nombre de diferentes archivos. Además, puede resultar de un comando bash o un array en lugar de elementos separados por espacios.
for Item in File_0 File_1 File_N
do
	Some Operations on Item
done

O

for Item in $(Command)
do
	Some Operations on Item    
done

Cuando se usa un comando con el bucle for, la variable Item se asignará con cada uno de los tokens de salida uno por uno. Por ejemplo, el siguiente script imprimirá todos los archivos o carpetas que comiencen con f en el directorio actual usando el bucle for.

#!/bin/bash
for Item in $(ls f*)
do
   echo "$Item"
done

Definición de rangos y tamaño de salto en Bash for Loop

Si sabe que no falta ningún número entre algunos valores iniciales y finales. Incluso si la diferencia entre los dos valores consecutivos, también conocida como tamaño de salto, es mayor que 1, puede usar el bucle for con la siguiente sintaxis.

for i in {Start_Value..End_Value..Jump_Size}
  do 
     Statement(s)
 done

Ejemplo: Imprimir todos los números pares entre 10 y 20 requerirá el Start_Value=10, el End_Value=20 y el Jump_Size=2.

#!/bin/bash
for evenNumber in {10..20..2}
  do 
     echo "$evenNumber"
 done

Producción :

10
12
14
16
18
20

Hacer el bucle for en Bash Prompt y abordar el problema delimitando el punto y coma ;

El ; se utiliza para delimitar o finalizar comandos en una sola línea. También hay otros delimitadores, como &.

Sin embargo, cuando el ; se utiliza para terminar el comando, el siguiente comando solo se ejecuta después de la ejecución completa del comando anterior, también conocido como ejecución sincrónica.

Suponga que desea escribir un bucle for en una sola línea en el indicador de bash sin usar newline como terminador de declaración, entonces puede usar la siguiente sintaxis tomada del manual de referencia de Bash.

for Item [ [in [List of Items] ] ; ] do commands; done

Ejemplo: El siguiente código es equivalente a nuestro script anterior para imprimir números pares.

#!/bin/bash
for even in {10..20..2} ; do echo "$even";done
Nota
tenga en cuenta que los comandos vienen directamente después de la palabra clave do. Por lo tanto, agregar un ; después del do generará un error de sintaxis.

La sintaxis para el bucle for de tres expresiones o tipo C es la siguiente.

for (( Initilization ; Condition ; Increment/Decrement )) ; do commands ; done

Ejemplo:

#!/bin/bash
for ((i=10;i<20;i=i+2));do echo "$i"; done
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Artículo relacionado - Bash Loop