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.
Tabla de contenido
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?