Bash Script – DÍA 7
Proyecto final: Script profesional de chequeo de servidores
(el mejor cierre práctico para un técnico de sistemas)
1. Objetivo del día
Hoy vas a crear un script real de producción, capaz de:
- hacer ping a uno o varios servidores
- comprobar resolución DNS
- comprobar un puerto (ej: 443)
- comprobar respuesta HTTP (si aplica)
- generar un informe limpio en un archivo
- aceptar varios hosts o un archivo con hosts
- usar funciones, pipes, redirecciones y ejecución segura
Este proyecto te convierte en alguien capaz de escribir scripts útiles para cualquier equipo técnico.
🧩 (Opcional) Añadir métricas de CPU, RAM o disco
Si quieres ampliar tu script general y hacerlo aún más completo, aquí tienes un recordatorio práctico de cómo obtener estas métricas:
CPU — carga promedio
uptime | awk '{print $(NF-2), $(NF-1), $NF}'
RAM — memoria usada/libre
free -h | awk '/Mem:/ {print "Usada:", $3, "Libre:", $4}'
Disco — uso del sistema de archivos raíz
df -h / | awk 'NR==2 {print "Uso disco raíz:", $5}'
Ejemplo para integrarlo en el script (opcional)
check_recursos() {
cpu=$(uptime | awk '{print $(NF-2), $(NF-1), $NF}')
ram=$(free -h | awk '/Mem:/ {print $3 "/" $2}')
disco=$(df -h / | awk 'NR==2 {print $5}')
log "CPU Load: $cpu"
log "RAM: $ram"
log "Disco /: $disco"
}
Y luego llamarlo dentro de procesar_host():
check_recursos
Salida típica en el informe:
CPU Load: 0.12, 0.10, 0.08
RAM: 2.1G/8.0G
Disco /: 45%
2. Estructura profesional del script
El script seguirá esta estructura estándar:
#!/bin/bash
# 1. Configuración y validaciones
# 2. Funciones
# 3. Lógica principal (main)
# 4. Ejecución
3. Script completo
A continuación tienes un script totalmente funcional y modular.
3.1. Configuración inicial
#!/bin/bash
# --- Configuración inicial ---
LOG="informe_servidor.log"
> "$LOG" # Vacía el log al iniciar
if [[ $# -lt 1 ]]; then
echo "Uso: $0 <host1> [host2 host3 ...] o $0 -f archivo_de_hosts"
exit 1
fi
3.2. Funciones del script
# --- Funciones ---
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG"
}
check_ping() {
ping -c1 "$1" > /dev/null 2>&1
[[ $? -eq 0 ]] && echo "OK" || echo "FAIL"
}
check_dns() {
nslookup "$1" > /dev/null 2>&1
[[ $? -eq 0 ]] && echo "OK" || echo "FAIL"
}
check_port() {
nc -z "$1" "$2" > /dev/null 2>&1
[[ $? -eq 0 ]] && echo "ABIERTO" || echo "CERRADO"
}
check_http() {
status=$(curl -s -o /dev/null -w "%{http_code}" "http://$1")
echo "$status"
}
3.3. Función para procesar un archivo con hosts
procesar_archivo() {
while IFS= read -r host; do
procesar_host "$host"
done < "$1"
}
3.4. Función principal que analiza un host
procesar_host() {
host="$1"
log "=== Analizando servidor: $host ==="
ping_result=$(check_ping "$host")
dns_result=$(check_dns "$host")
port_result=$(check_port "$host" 443)
http_result=$(check_http "$host")
log "Ping: $ping_result"
log "DNS: $dns_result"
log "Puerto 443: $port_result"
log "HTTP: $http_result"
# Si quieres añadir CPU/RAM/Disco, descomenta:
# check_recursos
log "-----------------------------------"
}
3.5. Lógica principal (main)
Incluye validación si se usa -f.
main() {
if [[ "$1" = "-f" ]]; then
if [[ -z "$2" || ! -f "$2" ]]; then
echo "Debes indicar un archivo válido después de -f"
exit 1
fi
procesar_archivo "$2"
else
for host in "$@"; do
procesar_host "$host"
done
fi
}
4. Ejecución del script
main "$@"
5. Uso del script
Guardar como:
check_servidor.sh
Dar permisos:
chmod +x check_servidor.sh
Ejemplo 1: varios hosts
./check_servidor.sh google.com github.com 8.8.8.8
Ejemplo 2: archivo con hosts
./check_servidor.sh -f servidores.txt
Ejemplo de servidores.txt:
google.com
github.com
192.168.1.10
srv-interno-01
6. Ejemplo de informe generado
[2025-02-17 10:55:30] === Analizando servidor: google.com ===
[2025-02-17 10:55:30] Ping: OK
[2025-02-17 10:55:30] DNS: OK
[2025-02-17 10:55:30] Puerto 443: ABIERTO
[2025-02-17 10:55:30] HTTP: 200
-----------------------------------
7. Práctica guiada
- Crear
mis_hosts.txt - Añadir 5 hosts
- Ejecutar:
./check_servidor.sh -f mis_hosts.txt - Revisar el informe generado
- Mejorar el script:
- Añadir puertos adicionales (22, 80, 8080…)
- Añadir CPU/RAM/Disco
- Enviar alerta si un host falla
- Guardar informes históricos
8. Checklist del Día 7
El script debe:
- estar dividido en funciones
- aceptar varios hosts
- aceptar un archivo con hosts
- hacer ping
- comprobar DNS
- comprobar puertos
- comprobar HTTP
- usar pipes, redirecciones y códigos de salida
- generar un informe limpio
- tener estructura profesional
Si todo está marcado…
👉 Has completado Bash Script como un auténtico administrador de sistemas.
⭐ Cierre del Mini-Tutorial de Bash Script
Has completado un recorrido intensivo en solo 7 días.
Ya no solo sabes ejecutar comandos:
sabes automatizarlos de forma profesional.
Has aprendido:
- variables
- condicionales
- bucles
- argumentos
- procesar archivos
- pipes y redirecciones
- funciones
- modularización
- chequeos de servidores
- generación de informes
Este curso no pretende crear expertos…
pero sí técnicos útiles desde el primer día, el espíritu de tus Mini Tutoriales de Emergencia.
