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

  1. Crear mis_hosts.txt
  2. Añadir 5 hosts
  3. Ejecutar: ./check_servidor.sh -f mis_hosts.txt
  4. Revisar el informe generado
  5. 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.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies