for con Bash

Estructura de control for para Linux

La estructura de control for en Linux permite repetir una serie de comandos o acciones para un conjunto de elementos (elementos de una lista o valores numéricos).

for elemento in lista
do
    # Comandos que se ejecutarán en cada iteración
done

Recuerda que antes de ejecutar tu script.sh en nuestro equipo debemos asignar permisos de ejecución. Puedes aprender sobre cómo aplicar permisos a tus scripts con chmod en Bash.

Vamos a realizar un ejemplo rápido y sencillo en el que usaremos el bucle for con Bash para recorrer una lista con los días de la semana. La lista de días estará almacenada en una variable de Linux llamada días_semana.

#!/bin/bash

dias_semana="Lunes Martes Miércoles Jueves Viernes Sábado Domingo"
for dia in $dias_semana
do
    echo $dia
done

El código de este ejemplo no puede ser más sencillo, aun así veremos qué hace cada una de las instrucciones:

  • Relleno la variable dias_semana con la lista de días.
  • Recorro la lista $dias_semana y en cada iteración se almacena el valor del día en la variable $dia.
  • Mediante la instrucción echo de Linux muestro el valor de la variable en pantalla.
Recorriendo una lista de strings con el bucle for de Linux

Bucle for con rangos numéricos

Con el bucle for de Linux podemos recorrer también rangos numéricos. Usaremos la notación {1..5} para especificar los rangos.

Vamos a ver un ejemplo en el que mostraremos los 31 días que tiene el mes de julio mediante un bucle for con Bash.

#!/bin/bash

echo "Días mes de julio"
for dia in {1..31}
do
    echo "$dia de julio"
done

Vamos a ver cómo hacer una cuenta atrás de forma sencilla.

#!/bin/bash

echo "Cuenta atrás"
for dia in {31..1}
do
    echo "$dia de julio"
done

Ahora podemos recorrer los días del mes de julio mostrando únicamente los días impares. En el ejemplo anterior no hemos indicado el incremento y por defecto ha sido de uno. Ahora le indicaremos a la estructura for de Linux que el incremento queremos que sea de dos para cada iteración.

#!/bin/bash

echo "Días impares"
for dia in {1..2..31}
do
    echo "$dia de julio"
done

Este mismo ejemplo para recorrer los números impares del mes de julio lo podemos realizar de otra forma muy similar.

#!/bin/bash

echo "Días impares con seq"
for dia in $(seq 1 2 31)
do
    echo "$dia de julio"
done

Otra forma de recorrer un rango numérico es la siguiente.

#!/bin/bash

echo "Días de julio"
for ((i=1;i<=31;i++))
do
    echo $i
done

Recorriendo los archivos de un directorio con el bucle for

Ahora vamos a ver un ejemplo (algo colorido) en el que recorreremos una lista de archivos de nuestro directorio que cumplan con el criterio de búsqueda que le indiquemos. El criterio de búsqueda será un simple ls (recuerda que podemos hacer el criterio de búsqueda lo complejo que necesitemos).

Mostraremos en pantalla cada archivo del directorio con su tipo de archivos mediante el comando de Linux file.

#!/bin/bash

criterio_busqueda=$(ls)
verde="\033[32m"
amarillo="\033[33m"
fin_color="\033[0m"

for archivo in $criterio_busqueda
do
    echo -e "$amarillo → $fin_color $verde$(file $archivo)$fin_color"
done
Recorriendo archivos de un directorio con el bucle for de Linux

Podemos hacer uso del bucle for de Linux directamente en la terminal de la siguiente forma.

for archivo in $(ls); do echo $archivo; done

Bucles for anidados

Anidar bucles for no es más que incluir un bucle for dentro de otro bucle for. Se pueden utilizar para recorrer estructuras más complejas. Un ejemplo típico anidando bucles podríamos utilizarlo para mostrar en pantalla una tabla de multiplicar.

#!/bin/bash

for tabla in {1..3}
do
    echo "Tabla de multiplicar del $tabla"
    for numero in {1..10}
    do
        echo -e "→ $tabla x $numero = $(($tabla*$numero))"
    done
    echo
done

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *