Bucle for en Bash

Fumbani Banda 30 enero 2023
  1. El bucle for en Bash
  2. Ejemplos usando el bucle for en Bash
  3. Salida condicional con un break en el bucle for en Bash
  4. Sustitución de comandos con bucle for
Bucle for en Bash

Este tutorial explica el uso del bucle for en los scripts de Bash utilizando la notación de rango y la notación de tres expresiones como en el lenguaje de programación C.

El bucle for en Bash

El bucle for es una declaración de Bash que se utiliza para ejecutar comandos repetidamente. El bucle for en Bash usa dos notaciones principales. Las dos notaciones se muestran a continuación.

La primera notación usa el bucle for con un rango definido. En la siguiente sintaxis, el punto final del rango es n. Significa que el bucle for ejecutará los comandos dentro de él n veces antes de detenerse.

for variable in 1 2 3 ... n
do
    command1
    command2
done

La segunda notación usa el bucle for con una expresión de tres como en el lenguaje de programación C. exp1 es la inicialización, exp2 es la condición y exp3 es el incremento.

for ((exp1; exp2; exp3))
do 
    command1 
    command2 
done

Ejemplos usando el bucle for en Bash

Las secuencias de comandos a continuación demuestran el uso del bucle for en las secuencias de comandos de Bash.

Este script establece el valor de la variable i en 1 la primera vez, e imprime line number 1. Luego vuelve al bucle for, establece la variable i en 2, e imprime line number 2.

El script hace esto repetidamente, cambiando el valor de i hasta que llega al último número, 5. Una vez que imprime line number 5, el bucle for sale automáticamente.

#!/bin/bash
for i in 1 2 3 4 5
do
    printf "line number $i"
    printf "\n"
done

Ejecutar el script anterior imprime la siguiente salida en la salida estándar.

line number 1
line number 2
line number 3
line number 4
line number 5

El siguiente script usa las llaves para definir un rango para que el bucle for itere. Los números dentro de las llaves se incrementan secuencialmente.

La primera vez, el valor de i se establece en 1. Luego, el script ejecuta los dos comandos printf dentro del bucle for. El valor de i se incrementa en 1, se convierte en 2, y se ejecutan los comandos printf dentro del bucle for.

El valor de i se incrementa repetidamente hasta que finalmente se convierte en 5, y una vez que se han ejecutado los dos comandos printf, el bucle for termina automáticamente.

!/bin/bash
for i in {1..5}
do
    printf "Hello World $i"
    printf "\n"
done

El siguiente es el resultado que se imprime después de ejecutar el script.

Hello World 1
Hello World 2
Hello World 3
Hello World 4
Hello World 5

A continuación, el script usa la notación de tres expresiones como en el lenguaje de programación C. En la primera expresión, x se inicializa en 0. La segunda expresión tiene la prueba condicional que comprueba si x es menor o igual que el valor de la variable max.

El valor de la variable max se ha fijado en 5. La última expresión incrementa el valor de x en 1.

La primera vez, el valor de x es 0, y la condición devuelve verdadera porque 0 es menor o igual que 5. El bucle for luego imprime number: 0 en la terminal, y el valor de x se incrementa en 1. x ahora se convierte en 1.

1 también se prueba si es menor o igual que 5, devuelve verdadero y el bucle for imprime número: 1. Este proceso se repite hasta que la condición devuelve falso y el bucle for finaliza.

#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
for ((x=0;x<=max;x++)); do
    printf "number: $x\n"
done

A continuación se muestra el resultado impreso en el terminal después de ejecutar el script.

Print Numbers from 0 to 5
number: 0
number: 1
number: 2
number: 3
number: 4
number: 5

Salida condicional con un break en el bucle for en Bash

El siguiente script muestra cómo salir de un bucle for con la palabra clave break. El bucle for está configurado para iterar si el valor de la variable x es menor o igual que el valor de la variable max. Sin embargo, hay un comando test dentro del bucle for.

El comando test comprueba si el valor de la variable x es igual a 3; si esta prueba devuelve verdadero, el script encuentra la palabra clave break y el bucle for sale.

#!/bin/bash
max=5
printf "Print Numbers from 0 to $max\n"
printf "Program will exit when we hit 3\n"

for ((x=0;x<=max;x++)); do
    printf "number: $x\n"
    if [ $x  -eq  3 ]
    then
        break
    fi
done

El siguiente es el resultado que se muestra en el terminal estándar cuando se ejecuta el script. El bucle for existe cuando el valor de x es igual a 3 porque el comando test dentro del bucle for evalúa la expresión aritmética cuando el valor de la variable x se establece en 3, y devuelve verdadero. Luego, el script encuentra la palabra clave break dentro de la declaración if y sale.

Print Numbers from 0 to 5
Program will exit when we hit 3
number: 0
number: 1
number: 2
number: 3

Sustitución de comandos con bucle for

La siguiente secuencia de comandos muestra el uso del bucle for con sustitución de comandos. La sustitución de comandos es una función de Bash que nos permite ejecutar comandos de Linux y almacenar la salida del comando en una variable de Bash. Una vez que se ejecuta un comando usando esta función, la salida estándar del comando reemplaza el comando.

En el script, el comando cat se ejecuta utilizando la sustitución de comandos. La salida de cat file1.txt reemplaza el comando, y el bucle for itera a través de la salida del comando y lo imprime en la salida estándar usando el comando printf.

#!/bin/bash
printf "Program prints the lines of a file\n\n"

for line in $(cat file1.txt)
do
     printf "$line"
     printf "\n"
done

El script produce el siguiente resultado cuando se ejecuta. El archivo file1.txt contiene una lista de tres idiomas que se imprimen en el terminal estándar.

Program prints the lines of a file

French
English
Spanish
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Artículo relacionado - Bash Loop