Bash Script – DÍA 3
Bucles y automatización: for, while, until + procesar archivos línea a línea
1. Objetivo del día
Aprender a repetir tareas de forma automática:
for→ recorrer listas, rangos y resultados de comandoswhile→ ejecutar mientras una condición se cumplauntil→ ejecutar hasta que algo ocurra- leer archivos línea a línea (fundamental para sysadmins)
- automatizar tareas repetitivas
Este es uno de los días más prácticos del curso.
2. Requisitos
- Saber condicionales (Día 2)
- Saber ejecutar scripts (Día 1)
3. Bucles for
El for es perfecto para recorrer listas de valores.
3.1. Recorrer una lista fija
for animal in perro gato caballo; do
echo "Animal: $animal"
done
3.2. Recorrer números
for i in {1..5}; do
echo "Número: $i"
done
3.3. Recorrer resultados de un comando
Ejemplo: listar archivos del directorio actual:
for archivo in $(ls); do
echo "Archivo: $archivo"
done
Ejemplo real: mostrar procesos relacionados con ssh:
for pid in $(pgrep ssh); do
echo "Proceso SSH: $pid"
done
4. Bucle while
Ejecuta mientras una condición sea verdadera.
4.1. Contador simple
contador=1
while [ $contador -le 5 ]; do
echo "Cuenta: $contador"
contador=$((contador + 1))
done
4.2. Esperar hasta que un servicio responda
Ejemplo profesional:
while ! ping -c 1 servidor >/dev/null 2>&1; do
echo "Esperando a que el servidor responda..."
sleep 2
done
echo "El servidor está activo"
5. Bucle until
Hace lo contrario: ejecuta hasta que algo ocurra.
5.1. Ejemplo simple
contador=1
until [ $contador -gt 5 ]; do
echo "Cuenta: $contador"
contador=$((contador + 1))
done
6. Leer un archivo línea a línea (SUPER IMPORTANTE)
Esto es esencial para:
- probar conectividad a una lista de servidores
- hacer ping a varias IP
- procesar tareas en lote
- comprobaciones de health-check
- automatizar tareas repetitivas
Forma profesional:
while IFS= read -r linea; do
echo "Procesando: $linea"
done < archivo.txt
🔹 IFS= evita romper líneas por espacios
🔹 -r evita interpretar caracteres especiales
6.1. EJEMPLO REAL: Comprobar si servidores responden al ping
Archivo servidores.txt:
srv01
srv02
8.8.8.8
google.com
Script:
#!/bin/bash
while IFS= read -r srv; do
echo "Probando $srv"
if ping -c 1 "$srv" >/dev/null 2>&1; then
echo "$srv responde"
else
echo "$srv NO responde"
fi
echo "--------------"
done < servidores.txt
Esto es EXACTAMENTE lo que usa un sysadmin en la vida real.
6.2. EJEMPLO REAL: Verificar resolución DNS
#!/bin/bash
while IFS= read -r host; do
echo "Resolviendo $host"
if nslookup "$host" >/dev/null 2>&1; then
echo "OK"
else
echo "FALLO"
fi
done < hosts.txt
6.3. EJEMPLO REAL: Verificar si un puerto está abierto
#!/bin/bash
while IFS= read -r host; do
echo -n "Probando $host:443... "
if nc -z "$host" 443 >/dev/null 2>&1; then
echo "ABIERTO"
else
echo "CERRADO"
fi
done < lista_hosts.txt
7. Práctica guiada (20–30 minutos)
7.1. Crear archivo con una lista de cosas
echo -e "uno\ndos\ntres" > lista.txt
7.2. Crear script que recorra esta lista
nano recorrer.sh
Poner:
#!/bin/bash
while IFS= read -r item; do
echo "Item: $item"
done < lista.txt
7.3. Crear script que haga 5 pings a google
for i in {1..5}; do
ping -c 1 google.com
done
8. Checklist del Día 3
- Usas bucles
forcon listas - Usas bucles
forcon rangos{1..N} - Usas
whilepara repetir acciones - Sabes cuándo usar
until - Lees archivos línea a línea
- Procesas listas de servidores o IPs
- Puedes automatizar tareas repetitivas
Si marcas todo → Día 3 superado.
9. Ejercicio sugerido
Crea un script llamado:
healthcheck.sh
Que:
- Lea un archivo
servidores.txt - Para cada servidor:
- ping
- nslookup
- comprobar puerto 443 con
nc
- Muestre un informe como:
srv01: ping OK, dns OK, puerto OK
srv02: ping FAIL, dns OK, puerto FAIL
Esto será la base del proyecto final.
10. Día 3 completado
Aquí es donde Bash empieza a brillar:
Ya sabes automatizar repeticiones y procesar listas completas.
Mañana seguimos con:
👉 Día 4 – Argumentos y parámetros especiales ($1, $#, «$@», shift)
Es el día que permite hacer scripts REUTILIZABLES y pasarles datos desde fuera.
