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.

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

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