Ejemplos bucles
Buscar y matar un proceso concreto
Caso real: un programa se ha quedado colgado.
#!/bin/bash
proceso="firefox"
for pid in $(pgrep "$proceso")
do
echo "Matando proceso $pid"
kill "$pid"
done
🔎 Aquí:
pgrepdevuelve los PID- El
forrecorre cada uno - Se actúa sobre cada proceso
Buscar un nombre en muchos archivos
Caso real: localizar dónde aparece una palabra en un proyecto.
#!/bin/bash
read -p "Texto a buscar: " texto
for archivo in *.txt
do
if grep -q "$texto" "$archivo"; then
echo "Encontrado en $archivo"
fi
done
Comprobar qué usuarios existen
Caso real: administración básica de usuarios.
#!/bin/bash
for usuario in ana juan pedro maria
do
if id "$usuario" &>/dev/null; then
echo "El usuario $usuario existe"
else
echo "El usuario $usuario NO existe"
fi
done
Buscar archivos grandes en un directorio
Caso real: liberar espacio en disco.
#!/bin/bash
for archivo in *
do
if [ -f "$archivo" ] && [ $(stat -c%s "$archivo") -gt 1000000 ]; then
echo "Archivo grande: $archivo"
fi
done
Hacer copia de seguridad de varias carpetas
Caso real: automatizar backups.
#!/bin/bash
for dir in documentos imagenes proyectos
do
if [ -d "$dir" ]; then
cp -r "$dir" "backup_$dir"
echo "Copia de $dir realizada"
else
echo "La carpeta $dir no existe"
fi
done
Buscar un archivo en todo el sistema (simplificado)
Caso real: no sabes dónde está un archivo.
#!/bin/bash
read -p "Nombre del archivo: " nombre
for archivo in $(find /home -type f 2>/dev/null)
do
if [[ "$archivo" == *"$nombre"* ]]; then
echo "Encontrado: $archivo"
fi
done
Limpiar archivos temporales antiguos
Caso real: mantenimiento del sistema.
#!/bin/bash
for archivo in /tmp/*
do
if [ -f "$archivo" ]; then
echo "Eliminando $archivo"
rm "$archivo"
fi
done
💡 En clase se puede comentar el rm para hacerlo seguro.
Comprobar qué servicios están activos
Caso real: revisión rápida del sistema.
#!/bin/bash
for servicio in apache2 ssh mysql
do
if systemctl is-active --quiet "$servicio"; then
echo "$servicio está activo"
else
echo "$servicio no está activo"
fi
done
Leer un archivo línea a línea
Caso real: procesar listas.
#!/bin/bash
while read linea
do
echo "Procesando: $linea"
done < lista.txt
Monitorizar hasta que ocurra algo
Caso real: esperar a que un proceso se cierre.
#!/bin/bash
while pgrep firefox > /dev/null
do
echo "Firefox sigue abierto..."
sleep 5
done
echo "Firefox se ha cerrado"