10 ejemplos de Bash For Loop con explicaciones

For Loop es una parte integral de cualquier lenguaje de programación. Permite que los programas iteren a través de un cierto número de elementos.

Por ejemplo, si desea recorrer una lista o una matriz de ‘n’ elementos, usaría un bucle for. Tomemos un ejemplo simple:

1Violet2Indigo3Blue4GreenRainbow Mesa

Para realizar cualquier acción o iterar los elementos de la tabla anterior, necesitamos un For Loop.

Golpe para bucle

En un script bash, la sintaxis de For Loop es la siguiente:

#!/bin/bash

for VAR in 1 2 3 4 5.....N

do

 ACTION 1

 ACTION 2

 .....

done

Bash For Loop es bastante sencillo. La primera línea #!/bin/bash indica que el código es un script bash. VAR representa la variable temporal utilizada para bucles. N indica el número máximo de iteraciones. ‘do’ y ‘done’ inician y detienen el bucle, respectivamente. Las acciones son los comandos que se ejecutan dentro del bucle.

Podemos ejecutar Bash For Loop con diferentes variables, como listas, cadenas, enteros y matrices. Este artículo mostrará algunos ejemplos comunes de Bash For Loop.

Puede ejecutar estos programas directamente en la línea de comando bash o guardarlos en un archivo y ejecutar el archivo usando el comando Bash filename.sh.

Lectura de lista estática

Considere la siguiente lista: rainbowColorList = violeta, índigo, azul, verde, amarillo, naranja, rojo

Podemos imprimir la lista de cadenas anterior usando Bash For Loop de la siguiente manera:

#! /bin/sh

# Define the list

rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red

# Comma separator pattern using //,/

for colors in ${rainbowColorList//,/ }

do

   echo $colors

done

El resultado será la lista de elementos en una nueva línea.

#Output

Violet
Indigo
Blue
Green
Yellow
Orange
Red

Lectura de una matriz

La sintaxis para declarar una matriz es diferente. Use paréntesis para cada elemento (String).

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for colors in "${rainbowArray[@]}"; do

     echo "I like $colors"

done

‘@’ se usa para iterar a través de cada elemento de la matriz.

#Output

I like Violet
I like Indigo
I like Blue
I like Green
I like Yellow
I like Orange
I like Red

También podemos usar For Loop para imprimir los índices y los elementos de la matriz.

#Printing with index

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for i in "${!rainbowArray[@]}";

do

  echo "Color at index " $i " : " "${rainbowArray[$i]}"

  i=$((i+1));

done
#Output

Color at index 0 : Violet
Color at index 1 : Indigo
Color at index 2 : Blue
Color at index 3 : Green
Color at index 4 : Yellow
Color at index 5 : Orange
Color at index 6 : Red

Tenga en cuenta que usamos ‘!’ en el bucle para obtener el índice del elemento.

Rango iterativo de números

Podemos usar Bash For Loop para iterar sobre un rango de números.

#iterating over range of numbers

echo "Countdown begins..."

for N in {10..0}

do

    echo "$N"

done

El ‘..’ indica un rango de números.

#Output

10
9
8
7
6
5
4
3
2
1
0

También podemos omitir números de conteo especificando el rango.

En el siguiente ejemplo, estamos contando salteados de 3 en 3.

#iterating with skip counting

echo "Countdown begins..."

for N in {30..0..3}

do

    echo "$N"

done

El programa anterior comienza con 30 como el primer número y cuenta hacia atrás hasta 0. El último parámetro en el ciclo for ‘3’ especifica el número de conteo salteado.

#Output

30
27
24
21
18
15
12
9
6
3
0

Cadenas y caracteres

Podemos hacer muchas operaciones de cadenas interesantes con Bash For Loop.

Por ejemplo, podemos leer cada carácter de una cadena usando el operador ‘seq’ en un For Loop:

#read characters of a string

myword="welcome"

for i in $(seq 1 ${#myword})

do

 echo "${myword:i-1:1}"

done

Tenga en cuenta que ‘seq’ debe comenzar con 1 para obtener primero el primer carácter.

#Output

W
e
l
c
o
m
e

También podemos imprimir las cadenas separadas por espacios una a una:

#read each word from a sentence

mysentence="Welcome to kirukiru.es. One stop hub for all techies"

for word in $mysentence; do

    echo $word

done
#Output

Welcome 
to 
kirukiru.es. 
One 
stop 
hub 
for 
all 
techies

Expresiones

Similar a cualquier otro lenguaje de programación como Java, podemos colocar expresiones dentro de un Bash For Loop.

for (( var=10; var>=0; var-- ))

do 

  echo "Counting down...$var"

done
#Output

Counting down...10
Counting down...9
Counting down...8
Counting down...7
Counting down...6
Counting down...5
Counting down...4
Counting down...3
Counting down...2
Counting down...1
Counting down...0

Lectura de argumentos de línea de comandos

Para leer los argumentos de la línea de comandos, usamos el comando ‘leer’. En el siguiente ejemplo, obtendremos algunos números del usuario e imprimiremos la suma usando Bash For Loop. Usamos la variable total para almacenar el total intermedio y final o la suma de los números.

read -a array -p "Enter the numbers you want to add:"

total=0

for i in ${array[@]}; do

  let total+=$i

done

echo "Sum of the numbers is: $total"

La salida es:

#Output

Enter the numbers you want to add: 3 4 66
Sum of the numbers is: 73

Encontrar números pares e impares

Para encontrar números pares e impares entre 1 y 10 (o cualquier número N), debemos usar la condición if junto con Bash for Loop. Para determinar un número par, dividiremos el número por 2 y si el resto es 0, entonces lo categorizaremos como par o impar.

#declare the list where the even and odd numbers will be sorted and kept

evennum=""

oddnum=""

for (( i=1; i<=10; i++ ))

do

remainder=$(( $i % 2 ))

if [ $remainder -eq 0 ]; then

 evennum="$evennum $i "

else

 oddnum="$oddnum $i "

fi

done

echo "Even numbers are: "$evennum

echo "Odd numbers are: "$oddnum

Tenga en cuenta que estamos dando el rango como 10 en el ejemplo anterior. Podemos cambiar este número para obtener números pares e impares entre cualquier rango. También puede intentar leer el número del usuario usando el comando ‘leer’ que aprendimos en la sección anterior.

#Output

Even numbers are: 2 4 6 8 10
Odd numbers are: 1 3 5 7 9

Bucle infinito

Infinity o Bucle infinito es un bucle que no para de ejecutarse, y hay que forzar al programa a que pare usando Ctrl+C. Podemos crear fácilmente un bucle infinito usando el ‘; ;’ operador dentro del bucle for:

for (( ; ; ))

do

  echo "Welcome to kirukiru.es"

done
#Output

Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
Welcome to kirukiru.es
^C
$

Declaración de ruptura

Las declaraciones de interrupción se utilizan para salir del bucle cuando se cumple una condición ‘si’.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    break

  fi

  echo "Searching for Green, the color now is $color"

done

echo "I found my color $color"

En este ejemplo, estamos tratando de encontrar el color verde. El bucle For recorre cada color y, una vez que se encuentra el color verde, el programa sale del bucle debido a la sentencia break.

#Output

Searching for Green, the color now is Violet
Searching for Green, the color now is Indigo
Searching for Green, the color now is Blue
I found my color Green

Continuar Declaración

Continuar se usa para omitir el bucle actual y pasar al siguiente en función de una determinada condición. Por ejemplo, si no desea imprimir el color ‘Verde’ de nuestro programa anterior, podemos poner continuar, y se mostrarán todos los demás colores excepto el Verde.

for color in Violet Indigo Blue Green Yellow Orange Red

do

  if [[ "$color" == 'Green' ]]; then

    continue

  fi

  echo "$color"

done
#Output

Violet
Indigo
Blue
Yellow
Orange
Red

Ultimas palabras

Hemos cubierto los usos más comunes de Bash For Loop, usando cadenas, enteros, matrices y listas. Si está aprendiendo Linux pero tiene una máquina con Windows 10, puede usar la función WSL e instalar Linux en su máquina con Windows.

Luego puede usar la terminal de Linux de manera similar a CMD.

A continuación, puede consultar ¿Cómo ejecutar scripts bash usando Python?