36 Bucles (for loops)
Fecha: 15 de octubre, 2026
Objetivos:
- Introducir bucles for → Reconocer la estructura de un
for loopy su utilidad para repetir tareas sobre listas o rangos. - Ejecutar bucles for en ejercicios → Implementar iteraciones simples (ej. recorrer archivos, imprimir secuencias).
- Explorar bucles while y until → Diferenciar entre
while(condición verdadera) yuntil(condición falsa) para controlar la repetición. - Controlar la ejecución de bucles → Usar instrucciones como
breakycontinuepara modificar el flujo dentro de un ciclo.
36.1 ¿Qué es un bucle?
Un bucle (loop) es una estructura de control que permite ejecutar un bloque de instrucciones varias veces, sin necesidad de escribir repetidamente los mismos comandos.
Por ejemplo, imaginemos que queremos mostrar cinco veces el mensaje "Hola, mundo".
Sin utilizar bucles:
echo "Hola, mundo"
echo "Hola, mundo"
echo "Hola, mundo"
echo "Hola, mundo"
echo "Hola, mundo"Utilizando un bucle for:
for numero in 1 2 3 4 5; do
echo "Hola, mundo"
doneAmbos producen el mismo resultado, pero el segundo es más corto, fácil de modificar y escalable.
36.2 ¿Qué tipos de bucles existen en Bash?
| Bucle | ¿Cuándo utilizarlo? |
|---|---|
for |
Cuando queremos recorrer una lista de elementos o repetir una acción un número determinado de veces. |
while |
Cuando queremos repetir instrucciones mientras una condición sea verdadera. |
En esta clase nos concentraremos en for, uno de los bucles más utilizados en Bash.
36.2.1 Diferencias entre for y while
| Característica | for |
while |
|---|---|---|
| Recorre una lista de valores | Sí | Puede hacerlo con lógica adicional |
| Evalúa una condición para continuar | En la variante aritmética | Sí |
| Ideal para un número conocido de repeticiones | Sí | También puede utilizarse |
| Ideal para repetir hasta obtener una entrada válida | Menos conveniente | Sí |
| Útil para menús interactivos | Menos conveniente | Sí |
36.3 Estructura básica de for
for variable in lista; do
comandos
done
| Elemento | ¿Qué significa? |
|---|---|
for |
Inicia el bucle. |
variable |
Almacena temporalmente cada elemento de la lista. |
in |
Indica qué valores se recorrerán. |
lista |
Conjunto de valores que queremos procesar. |
do |
Marca el inicio de las instrucciones que se repetirán. |
comandos |
Instrucciones que se ejecutan en cada iteración. |
done |
Indica el final del bucle. |
Ejemplo:
for numero in 1 2 3 4 5; do
echo "Número: $numero"
doneResultado:
Número: 1
Número: 2
Número: 3
Número: 4
Número: 5
Cada vez que el bucle ejecuta sus instrucciones se conoce como una iteración.
36.4 Formas de utilizar for en Bash
36.4.1 Ejemplo 1. Recorrer una lista de palabras
No estamos limitados a utilizar números.
for fruta in manzana pera naranja uva; do
echo "Me gusta la $fruta"
doneResultado:
Me gusta la manzana
Me gusta la pera
Me gusta la naranja
Me gusta la uva
36.4.2 Ejemplo 2. Utilizar rangos numéricos { }
Opción 1. Expansión de llaves { }
Cuando tenemos números consecutivos, podemos utilizar la expansión de llaves.
for numero in {1..10}; do
echo "$numero"
doneTambién podemos contar hacia atrás:
for numero in {10..1}; do
echo "$numero"
doneY establecer incrementos de 2 en 2:
for numero in {0..10..2}; do
echo "$numero"
doneResultado: 0 2 4 6 8 10.
También puedes especificar el decremento:
for numero in {10..1..-1}; do
echo "$numero"
doneOpción 2. Utilizando (( )) — Estilo C
for ((numero=10; numero>=1; numero--)); do
echo "$numero"
doneAquí:
numero=10: comienza en 10.numero>=1: continúa mientras sea mayor o igual a 1.numero--: disminuye el valor en 1.
También puedes utilizar numero-=1 en lugar de numero--.
for ((i=1; i<=5; i++)); do
echo "Número: $i"
done| Elemento | Significado |
|---|---|
i=1 |
Inicializa el contador en 1. |
i<=5 |
El bucle continúa mientras i sea menor o igual a 5. |
i++ |
Incrementa el contador en 1 después de cada iteración. |
Diferencia importante: en esta sintaxis utilizamos (( )) para realizar operaciones y comparaciones aritméticas, sin necesidad de escribir $i.
Opción 3. Utilizando seq
seq es un comando externo que genera secuencias numéricas.
for numero in $(seq 10 -1 1); do
echo "$numero"
doneLa estructura seq 10 -1 1 significa: comenzar en 10, disminuir de uno en uno y terminar en 1.
36.5 Comparación
| Forma | Sintaxis | ¿Cuándo usarla? |
|---|---|---|
| Llaves | {10..1} |
Rangos fijos y sencillos. |
| Estilo C | ((i=10; i>=1; i--)) |
Cuando necesitas controlar el contador. |
seq |
$(seq 10 -1 1) |
Para generar secuencias numéricas, incluso con límites variables. |
| Lista manual | 10 9 8 ... 1 |
Cuando tienes valores específicos. |
36.6 ¿Y si quiero disminuir de 2 en 2?
Puedes hacerlo de estas tres maneras:
# Opción 1: Llaves
for i in {10..1..2}; do
echo "$i"
done
# Opción 2: Estilo C
for ((i=10; i>=1; i-=2)); do
echo "$i"
done
# Opción 3: seq
for i in $(seq 10 -2 1); do
echo "$i"
doneLas tres producen:
10
8
6
4
2
Por ejemplo:
echo "¿Desde qué número quieres contar?"
read -r inicio
for ((i=inicio; i>=1; i--)); do
echo "$i"
done36.7 Realizar operaciones matemáticas
Podemos combinar un bucle con la expansión aritmética $(( )).
for numero in {1..5}; do
cuadrado=$((numero * numero))
echo "$numero al cuadrado es $cuadrado"
doneResultado:
1 al cuadrado es 1
2 al cuadrado es 4
3 al cuadrado es 9
4 al cuadrado es 16
5 al cuadrado es 25
36.8 Utilizar un acumulador
Un acumulador permite guardar un resultado que se va modificando en cada iteración.
suma=0
for numero in {1..5}; do
suma=$((suma + numero))
done
echo "La suma total es: $suma"Resultado: La suma total es: 15.
Observa que suma=0 se encuentra antes del bucle para no reiniciar el acumulador en cada iteración.
36.9 Aplicaciones prácticas de for en Bash
Colocate en la carpeta matematicos
36.9.1 Crear varios archivos automáticamente
for numero in {1..5}; do
touch "archivo${numero}.txt"
doneEsto crea:
archivo1.txt
archivo2.txt
archivo3.txt
archivo4.txt
archivo5.txt
36.9.2 Recorrer archivos de un directorio
for archivo in *.txt; do
echo "Encontré: $archivo"
doneEl patrón *.txt selecciona los archivos cuyos nombres terminan en .txt en el directorio actual.
Nota: si no hay coincidencias, Bash normalmente conserva el patrón literal *.txt, salvo que se haya configurado otra opción de expansión.
36.9.3 Buscar una palabra en varios archivos
for archivo in nombres.txt alumnos.txt usuarios.txt; do
if [ -f "$archivo" ]; then
echo "Buscando en $archivo"
grep -i "Ana" "$archivo"
fi
doneAquí combinamos:
forpara recorrer archivos.ify-fpara verificar que cada archivo exista y sea un archivo regular.grep -ipara buscar el texto sin distinguir mayúsculas y minúsculas.
36.10 Bucles while en Bash
36.10.1 ¿Qué es un bucle while?
En Bash, while es una estructura de control que permite repetir un bloque de instrucciones mientras una condición sea verdadera.
A diferencia de for, que normalmente utilizamos para recorrer una lista o secuencia, while resulta especialmente útil cuando no sabemos exactamente cuántas veces necesitaremos repetir una acción.
Por ejemplo:
- Solicitar una contraseña hasta que sea correcta.
- Repetir un menú hasta que el usuario decida salir.
- Contar números mientras se cumpla una condición.
- Leer un archivo línea por línea.
- Validar que un usuario introduzca un dato correcto.
36.10.2 Estructura básica de while
while [ condicion ]; do
comandos
done| Elemento | ¿Qué significa? |
|---|---|
while |
Inicia el bucle. |
[ condicion ] |
Evalúa si la condición es verdadera. |
do |
Indica el inicio de las instrucciones que se repetirán. |
comandos |
Instrucciones ejecutadas en cada iteración. |
done |
Finaliza el bloque del bucle. |
Importante: en Bash, while continúa mientras la condición devuelve un estado de salida exitoso (0).
36.10.3 Ejemplo 1. Contar del 1 al 5
contador=1
while [ "$contador" -le 5 ]; do
echo "Número: $contador"
contador=$((contador + 1))
doneResultado:
Número: 1
Número: 2
Número: 3
Número: 4
Número: 5
En cada iteración ocurre lo siguiente:
- Se evalúa si
contadores menor o igual a 5. - Si es verdadero, se ejecuta
echo. - Se incrementa
contadoren 1. - Se vuelve a evaluar la condición.
- Cuando
contadorllega a 6, el bucle termina.
36.11 Repaso: Tabla de operadores para condicionales en Bash
| Operación | [ ] y [[ ]] |
(( )) |
|---|---|---|
| Igual a | -eq |
== |
| Diferente de | -ne |
!= |
| Mayor que | -gt |
> |
| Menor que | -lt |
< |
| Mayor o igual | -ge |
>= |
| Menor o igual | -le |
<= |
36.11.1 Ejemplo 2. Contar del 10 al 1
contador=10
while [ "$contador" -ge 1 ]; do
echo "$contador"
contador=$((contador - 1))
doneTambién podemos utilizar la sintaxis aritmética de Bash:
contador=10
while (( contador >= 1 )); do
echo "$contador"
((contador--))
doneAmbas versiones producen una cuenta regresiva.
36.11.2 Ejemplo 3. Solicitar un número hasta que sea correcto
Este ejemplo es especialmente útil para introducir validación de datos y programación defensiva.
Queremos que el usuario introduzca un número entre 1 y 10.
numero=0
while [ "$numero" -lt 1 ] || [ "$numero" -gt 10 ]; do
echo "Introduce un número entre 1 y 10:"
read -r numero
done
echo "Número válido: $numero"El bucle se repite mientras el número esté fuera del rango.
Nota: este ejemplo supone que el usuario escribe números enteros. Más adelante podemos agregar una validación para impedir letras, entradas vacías y otros valores no numéricos.
36.11.3 Ejemplo 4. Solicitar una contraseña
password=""
while [ "$password" != "bash123" ]; do
echo "Introduce la contraseña:"
read -r password
done
echo "Acceso permitido"Aquí utilizamos !=, que significa diferente de.
El bucle continuará mientras la contraseña ingresada sea diferente de "bash123".
Este ejemplo es didáctico; en un sistema real no conviene guardar contraseñas directamente en el script ni mostrarlas mientras se escriben.
36.11.4 Ejemplo 5. Crear un menú interactivo con while y case
Este ejemplo combina tres estructuras que los alumnos ya pueden conocer: while, case y read.
opcion=0
while [ "$opcion" != "4" ]; do
echo "===== MENÚ ====="
echo "1. Mostrar fecha"
echo "2. Mostrar directorio"
echo "3. Mostrar usuario"
echo "4. Salir"
read -r opcion
case "$opcion" in
1)
date
;;
2)
pwd
;;
3)
whoami
;;
4)
echo "Hasta luego"
;;
*)
echo "Opción no válida"
;;
esac
doneEl menú se seguirá mostrando hasta que el usuario seleccione la opción 4.
Esta es una de las aplicaciones más comunes de while en scripts interactivos.