📚 Módulo 5: Organizando y escalando tareas¶
Duración estimada: según tu ritmo y experiencia.
Objetivo:
Estructurar scripts con funciones,
usar bucles avanzados (while, until),
programar tareas con cron,
y depurar eficientemente,
explorando su aplicación técnica. 🎯
Prerrequisitos:
Haber completado los Módulos 1, 2, 3 y 4,
acceso a un sistema Linux, macOS o WSL
con una terminal y un editor de texto (nano, vim o VS Code).
Nota: El tiempo varía según tu nivel y dedicación; experimenta con cada herramienta para optimizar tus scripts.
📖 Contenidos del Módulo¶
5.1. Funciones: Organiza tu código ⚙️¶
Teoría:
Las funciones agrupan comandos reutilizables en scripts.
Se definen con nombre() { comandos; } y se llaman con nombre.
Técnicamente, esto mejora la modularidad y mantenimiento.
Práctica:
- Crea un script
funciones.sh:nano funciones.sh - Añade una función básica:
Guarda, da permisos con
#!/bin/bash saludo() { echo "¡Hola desde la función!" } saludochmod +x funciones.shy ejecuta. - Pasa un argumento a la función:
nano funciones.sh saludo() { echo "¡Hola, $1!" } saludo "Aprendiz" ./funciones.sh - Crea una función con retorno:
nano funciones.sh suma() { echo $(( $1 + $2 )) } resultado=$(suma 5 3) echo "Suma: $resultado" ./funciones.sh - Llama la función varias veces:
nano funciones.sh for i in 1 2 do saludo "Intento $i" done ./funciones.sh
Dato curioso
Las funciones reducen duplicación de código, como en programas grandes. 😄
5.2. Bucles avanzados: while y until 🛡️¶
Teoría:
while repite mientras una condición sea verdadera.
until repite hasta que una condición sea verdadera.
Técnicamente, esto permite control preciso sobre repeticiones.
Práctica:
- Crea un script
bucle_while.sh:nano bucle_while.sh - Añade un
whilebásico:Guarda, da permisos y ejecuta.#!/bin/bash contador=0 while [ $contador -lt 3 ] do echo "Contador: $contador" contador=$((contador + 1)) done - Usa
untilpara un conteo inverso:nano bucle_until.sh #!/bin/bash contador=3 until [ $contador -eq 0 ] do echo "Faltan: $contador" contador=$((contador - 1)) done chmod +x bucle_until.sh ./bucle_until.sh - Combina con entrada:
nano bucle_while.sh read -p "Hasta dónde contar? " limite while [ $contador -le $limite ] do echo "Número: $contador" contador=$((contador + 1)) done ./bucle_while.sh - Añade condición compleja:
nano bucle_while.sh while [ $contador -le 5 ] && [ $((contador % 2)) -eq 0 ] do echo "Par: $contador" contador=$((contador + 1)) done ./bucle_while.sh
Consejo
Usa while para condiciones dinámicas; valida entradas para evitar bucles infinitos. 💡
5.3. Programación con cron: Tareas automáticas 📜¶
Teoría:
cron programa tareas para ejecutarse en horarios específicos.
Se edita con crontab -e usando formato min hora día mes día_semana comando.
Técnicamente, esto automatiza procesos en segundo plano.
Práctica:
- Edita el crontab:
Añade una línea como:
crontab -e* * * * * echo "Prueba" >> /tmp/cron.log. - Verifica la ejecución:
Nota: Puede tardar un minuto; revisa permisos.
cat /tmp/cron.log - Programa un script cada 5 minutos:
Asegúrate de usar la ruta correcta de
crontab -e # Añade: */5 * * * * /ruta/a/tu/script.sh >> /tmp/log.txt 2>&1funciones.sh. - Crea un script para
cron:nano tarea.sh #!/bin/bash date >> /tmp/tarea.log chmod +x tarea.sh crontab -e # Añade: * * * * * /ruta/a/tarea.sh cat /tmp/tarea.log - Elimina una tarea:
crontab -e # Comenta o elimina la línea añadida
Advertencia
Usa rutas absolutas en cron (ej. /home/usuario/script.sh) y verifica permisos. 🛑
5.4. Depuración avanzada: Soluciona problemas 🏗️¶
Teoría:
set -x traza ejecución, set -e detiene en errores.
bash -x script.sh ejecuta con depuración externa.
Técnicamente, esto asegura scripts robustos.
Práctica:
- Crea un script con error:
Ejecuta y observa el fallo.
nano depura.sh #!/bin/bash a=5 b= echo $((a / b)) - Usa
set -xpara trazar:nano depura.sh #!/bin/bash set -x a=5 b=0 echo $((a / b)) set +x chmod +x depura.sh ./depura.sh - Activa
set -epara salir en errores:nano depura.sh #!/bin/bash set -e set -x a=5 b=0 echo $((a / b)) set +x ./depura.sh - Depura desde la terminal:
bash -x depura.sh - Corrige y prueba:
nano depura.sh if [ $b -ne 0 ] then echo $((a / b)) else echo "Error: División por cero" fi ./depura.sh
Consejo
Usa set -e en producción para detener scripts en fallos críticos. 💡
5.5. Estructura profesional: Un script completo 🚀¶
Teoría:
Un script profesional usa funciones, validación y documentación.
Ejemplo: comentarios # y manejo de errores.
Técnicamente, esto asegura escalabilidad.
Práctica:
- Crea un script organizado:
nano backup.sh #!/bin/bash # Script de respaldo diario backup() { cp $1 /tmp/backup_$(date +%F).txt } if [ -f "$1" ] then backup "$1" else echo "Archivo no encontrado" fi - Dale permisos y prueba:
chmod +x backup.sh echo "Datos" > prueba.txt ./backup.sh prueba.txt ls /tmp/backup* - Añade un bucle y
cron:nano backup.sh for file in *.txt do backup "$file" done crontab -e # Añade: 0 0 * * * /ruta/a/backup.sh - Incluye depuración:
nano backup.sh set -x backup() { cp $1 /tmp/backup_$(date +%F).txt } set +x ./backup.sh prueba.txt - Verifica y limpia:
ls /tmp/backup* rm /tmp/backup*
Consejo
Documenta con # para que otros (o tú) entiendan el script. 💡
🛠️ Ejercicios prácticos¶
- Función:
- Crea una función que muestre la fecha en un formato personalizado.
- While:
- Usa
whilepara contar hasta un número ingresado.
- Usa
- Cron:
- Programa un script para guardar la hora cada hora.
- Depuración:
- Depura un script con división por cero usando
set -e.
- Depura un script con división por cero usando
- Desafío:
- Crea un script que respalde todos los
.txtcon funciones ycron.
- Crea un script que respalde todos los
5.6. Gestión avanzada del entorno con .bashrc 🚀¶
Teoría:
.bashrc es el archivo que Bash ejecuta al iniciar una sesión interactiva,
permitiendo personalizar tu entorno de trabajo de forma permanente.
Puedes definir funciones, alias, variables de entorno y condiciones,
integrándolas con scripts y automatización como la de cron.
Técnicamente, esto optimiza tu flujo de trabajo y escalabilidad.
Práctica:
- Edita
.bashrccon una función de monitoreo:nano ~/.bashrc # Añade al final: function monitor_system() { memoria=$(free -h | awk '/Mem:/ {print $3}') echo "Memoria en uso: $memoria" } monitor_system - Recarga y prueba la función:
source ~/.bashrc monitor_system - Añade una variable de entorno para scripts:
nano ~/.bashrc # Añade: export SCRIPT_DIR="/home/$USER/scripts" source ~/.bashrc echo $SCRIPT_DIR mkdir -p $SCRIPT_DIR - Integra con un script de cron:
nano $SCRIPT_DIR/log_script.sh # Añade: #!/bin/bash\necho "$(date): Registro" >> $SCRIPT_DIR/log.txt chmod +x $SCRIPT_DIR/log_script.sh crontab -e # Añade: * * * * * $SCRIPT_DIR/log_script.sh cat $SCRIPT_DIR/log.txt # Espera un minuto para ver el log - Añade una condición y haz backup:
nano ~/.bashrc # Añade: if [ ! -f ~/.bashrc.bak ]; then cp ~/.bashrc ~/.bashrc.bak echo "Backup creado" fi source ~/.bashrc
Consejo
Define variables en .bashrc para usarlas en scripts de cron y recarga siempre con source. 💡
📝 Evaluación¶
Cuestionario corto (5 preguntas):
- ¿Qué hace una función en Bash?
- ¿Cuál es la diferencia entre
whileyuntil? - ¿Cómo se programa una tarea con
cron? - ¿Para qué sirve
set -e? - ¿Qué mejora la documentación en un script?
- ¿Para qué sirve
.bashrc? - ¿Cómo defines una variable en
.bashrc?
Tarea práctica:
- Crea un script
organiza.shque:- Use una función para copiar archivos
.sha/tmp. - Use
whilepara procesar 5 archivos. - Programe con
cronpara ejecutarse diariamente. - Incluya depuración con
set -x. - Crea un script profesional con función y bucle.
- Añade una función de monitoreo con variable en
.bashrc.
- Use una función para copiar archivos
- Entrega: Script, log de cron, captura de depuración, y captura de
.bashrccon los cambios.
🎉 Recursos adicionales¶
- Documentación:
man cron,man bash. - Enlaces:
- Guía de funciones (detalles técnicos).
- Tutorial de
cron(ejemplos prácticos).
Tip
Prueba cron con tareas simples antes de automatizar críticas. 💡
🚀 Siguientes pasos¶
¡Felicidades por completar el Módulo 5! En el Módulo 6, aprenderás a conectar tu terminal al mundo real con herramientas avanzadas. ¡Sigue escalando! ✍️