📚 Módulo 7: Construyendo un asistente experto¶
Duración estimada: según tu ritmo y experiencia.
Objetivo: Desarrollar un proyecto completo (backups o monitoreo), optimizar scripts para eficiencia, y manejar errores avanzados, consolidando tus habilidades técnicas. 🎯
Prerrequisitos:
Haber completado los Módulos 1, 2, 3, 4, 5 y 6,
acceso a un sistema Linux, macOS o WSL
con una terminal y un editor de texto (nano
, vim
o VS Code),
y, si posible, una máquina remota con ssh
.
Nota: El tiempo varía según tu nivel y dedicación; dedica tiempo a personalizar tu proyecto según tus necesidades.
📖 Contenidos del Módulo¶
7.1. Proyecto: Sistema de backups 🏗️¶
Teoría:
Un sistema de backups copia archivos automáticamente.
Usa funciones, cron
, y validación para robustez.
Técnicamente, esto protege datos críticos.
Práctica:
- Crea un script base
backup.sh
:nano backup.sh #!/bin/bash # Script de respaldo diario backup_dir="/tmp/backups" mkdir -p $backup_dir cp *.txt $backup_dir/
- Añade una función y fecha:
nano backup.sh backup() { fecha=$(date +%F) cp $1 $backup_dir/backup_$fecha.txt } for file in *.txt do backup "$file" done chmod +x backup.sh ./backup.sh ls $backup_dir
- Valida existencia de archivos:
nano backup.sh if [ -f "$file" ] then backup "$file" else echo "Archivo $file no encontrado" >&2 fi ./backup.sh
- Programa con
cron
:crontab -e # Añade: 0 0 * * * /ruta/a/backup.sh >> /tmp/backup.log 2>&1 cat /tmp/backup.log
- Limpia backups antiguos:
nano backup.sh find $backup_dir -type f -mtime +7 -delete ./backup.sh ls $backup_dir
Dato curioso
Los backups evitan desastres; empresas los usan diariamente. 😄
7.2. Proyecto: Sistema de monitoreo 🚀¶
Teoría:
Un sistema de monitoreo vigila recursos (CPU, memoria).
Usa ps
, top
, y bucles para alertas.
Técnicamente, esto optimiza el rendimiento.
Práctica:
- Crea un script base
monitor.sh
:nano monitor.sh #!/bin/bash echo "Monitoreo: $(date)" > /tmp/monitor.log ps -u $USER >> /tmp/monitor.log
- Añade una función de alerta:
nano monitor.sh alerta() { uso=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') if [ $(echo "$uso > 50" | bc -l) -eq 1 ] then echo "Alerta: CPU alta $uso%" >> /tmp/monitor.log fi } alerta chmod +x monitor.sh ./monitor.sh cat /tmp/monitor.log
- Usa un bucle
while
:nano monitor.sh while true do alerta sleep 60 done # Para detener: Ctrl+C
- Programa con
cron
:crontab -e # Añade: */5 * * * * /ruta/a/monitor.sh >> /tmp/monitor.log 2>&1 cat /tmp/monitor.log
- Añade monitoreo remoto (opcional):
nano monitor.sh ssh usuario@192.168.1.100 "top -bn1" > /tmp/remoto.log ./monitor.sh cat /tmp/remoto.log
Consejo
Ajusta el intervalo de sleep
según tus necesidades. 💡
7.3. Optimización: Eficiencia en scripts 🛡️¶
Teoría:
Optimizar reduce tiempo y recursos.
Usa variables locales (local
), evita bucles innecesarios.
Técnicamente, esto mejora el rendimiento.
Práctica:
- Crea un script ineficiente:
nano lento.sh #!/bin/bash for i in {1..1000} do echo $i done > salida.txt chmod +x lento.sh time ./lento.sh
- Optimiza con redirección externa:
nano rapido.sh #!/bin/bash for i in {1..1000} do echo $i done > salida.txt time ./rapido.sh
- Usa variables locales:
nano rapido.sh optimiza() { local count=0 for i in {1..1000} do ((count++)) done echo $count } optimiza ./rapido.sh
- Evita comandos repetidos:
nano rapido.sh fecha=$(date) for i in {1..5} do echo "Iteración $i - $fecha" done ./rapido.sh
- Compara tiempos:
time ./lento.sh time ./rapido.sh
Advertencia
Evita cat
dentro de bucles; usa redirecciones directas. 🛑
7.4. Manejo de errores avanzado: Robustez 🖌️¶
Teoría:
Manejar errores usa trap
para capturar señales y ||
para fallbacks.
Ejemplo: trap 'echo Error' ERR
.
Técnicamente, esto asegura scripts fiables.
Práctica:
- Crea un script con error:
nano error.sh #!/bin/bash ls /ruta/falsa echo "Continúa" chmod +x error.sh ./error.sh
- Usa
trap
para capturar:nano error.sh trap 'echo "Error detectado" >&2' ERR ls /ruta/falsa echo "Continúa" ./error.sh
- Añade un fallback con
||
:nano error.sh ls /ruta/falsa || echo "Fallo ignorado" >&2 echo "Continúa" ./error.sh
- Combina en un script:
nano seguro.sh #!/bin/bash trap 'echo "Fallo en línea $LINENO" >&2' ERR cp noexiste.txt /tmp/ || echo "Copia falló" >&2 chmod +x seguro.sh ./seguro.sh
- Prueba con señal manual:
trap 'echo "Interrumpido" >&2' INT while true do echo "Ejecutando" sleep 1 done # Presiona Ctrl+C
Consejo
Usa LINENO
para rastrear errores en scripts largos. 💡
7.5. Proyecto final: Tu asistente personalizado 🚀¶
Teoría:
Integra todo en un proyecto (backup o monitoreo). Añade documentación y optimización. Técnicamente, esto demuestra maestría.
Práctica:
- Elige backup o monitoreo:
# Usa backup.sh o monitor.sh como base nano asistente.sh
- Añade funciones y optimización:
#!/bin/bash backup() { local dir="/tmp/backups" mkdir -p $dir cp $1 $dir/backup_$(date +%F).txt } for file in *.txt do [ -f "$file" ] && backup "$file" done
- Incluye manejo de errores:
trap 'echo "Error en línea $LINENO" >&2' ERR [ -d "$dir" ] || { echo "Directorio no creado" >&2; exit 1; }
- Programa con
cron
:crontab -e # Añade: 0 0 * * * /ruta/a/asistente.sh >> /tmp/asistente.log 2>&1 cat /tmp/asistente.log
- Documenta y prueba:
nano asistente.sh # Asistente de respaldo diario # Autor: [Tu nombre] # Descripción: Copia archivos .txt a /tmp/backups chmod +x asistente.sh ./asistente.sh ls /tmp/backups
Consejo
Personaliza el proyecto según tu entorno (ej. rutas, alertas). 💡
🛠️ Ejercicios prácticos¶
- Backup:
- Añade validación a
backup.sh
para archivos específicos.
- Añade validación a
- Monitoreo:
- Modifica
monitor.sh
para alertar por memoria alta.
- Modifica
- Optimización:
- Optimiza un script eliminando un bucle innecesario.
- Errores:
- Usa
trap
para capturar un error en un script.
- Usa
- Desafío:
- Crea un asistente que combine backup remoto con monitoreo local.
📝 Evaluación¶
Cuestionario corto (5 preguntas):
- ¿Qué hace un sistema de backups en Bash?
- ¿Cómo optimizas un script en Bash?
- ¿Para qué sirve
trap
en manejo de errores? - ¿Qué mejora la documentación en un proyecto?
- ¿Cómo integras
cron
en un script completo?
Tarea práctica:
- Crea un script
asistente_final.sh
que:- Implemente un sistema de backups o monitoreo.
- Use funciones y optimización.
- Maneje errores con
trap
. - Programe con
cron
y guarde logs.
- Entrega: Script, log, y una nota con las decisiones tomadas.
🎉 Recursos adicionales¶
- Documentación:
man find
,man trap
,man crontab
. - Enlaces:
- Guía de optimización (mejoras técnicas).
- Tutorial de proyectos (ideas avanzadas).
Tip
Revisa tus logs para perfeccionar tu asistente. 💡
🚀 Siguientes pasos¶
¡Felicidades por completar el Módulo 7! En el Módulo 8, explorarás maestría en Bash y más allá. ¡Sigue brillando! ✍️