Bash Script – DÍA 5

Funciones, modularización y organización profesional del script


1. Objetivo del día

Aprender a estructurar tus scripts usando funciones, lo que permitirá:

  • evitar repetir código
  • mejorar claridad y mantenimiento
  • crear módulos reutilizables
  • hacer scripts más largos y complejos
  • separar lógica y ejecución

Hoy es cuando tus scripts empiezan a parecer scripts de verdad.


2. Requisitos

  • Días 1–4 completados
  • Conocer condicionales, bucles y argumentos

3. ¿Qué es una función en Bash?

Una función es un bloque de código que puedes llamar cuando quieras.

Se escribe así:

nombre_funcion() {
    comandos
}

Y se ejecuta así:

nombre_funcion

4. Primera función simple

#!/bin/bash

saludar() {
    echo "Hola desde la función"
}

saludar

5. Funciones con argumentos

Dentro de una función, puedes usar:

  • $1 → primer argumento
  • $2 → segundo
  • "$@" → todos

Ejemplo:

mostrar_nombre() {
    echo "Tu nombre es: $1"
}

mostrar_nombre "Tomas"

6. Funciones con variables locales (MUY recomendado)

Dentro de una función puedes declarar variables locales:

mi_funcion() {
    local nombre="Tomas"
    echo "Hola $nombre"
}

Si usas local, evitas que esas variables afecten al resto del script.


7. Funciones que devuelven valores

En Bash NO hay return como en Python.
Se devuelve por:

1) echo (lo más común)

suma() {
    echo $(( $1 + $2 ))
}

resultado=$(suma 3 5)
echo "Resultado: $resultado"

2) Código de salida (0 = OK, >0 = error)

comprobar_ping() {
    ping -c1 "$1" >/dev/null 2>&1
    return $?
}

comprobar_ping google.com
echo "Código de salida: $?"
  • 0 → éxito
  • 1 o más → fallo

8. Funciones útiles para scripts profesionales

8.1. Log con timestamp

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

Uso:

log "Iniciando proceso…"

8.2. Función para abortar el script

error_exit() {
    echo "ERROR: $1"
    exit 1
}

Uso:

[ ! -f config.txt ] && error_exit "Falta config.txt"

8.3. Función para comprobar un comando

comando_existe() {
    command -v "$1" >/dev/null 2>&1
}

Uso:

if ! comando_existe curl; then
    error_exit "curl no está instalado"
fi

9. Modularización del script (estilo profesional)

Organiza TODO así:

#!/bin/bash

# --- 1. Configuración inicial ---
set -e
LOGFILE="/var/log/miscript.log"

# --- 2. Funciones ---
log() { ... }
comprobar_ping() { ... }

# --- 3. Lógica principal ---
main() {
    log "Iniciando script"
    comprobar_ping google.com
}

# --- 4. Ejecutar ---
main "$@"

Esto es estándar en scripts de producción.


10. Ejemplo real: script de salud del sistema con funciones

#!/bin/bash

salida_ok() {
    echo "[OK] $1"
}

salida_fail() {
    echo "[FAIL] $1"
}

comprobar_ping() {
    ping -c1 "$1" >/dev/null 2>&1 && salida_ok "Ping $1" || salida_fail "Ping $1"
}

comprobar_servicio() {
    systemctl is-active "$1" >/dev/null 2>&1 && salida_ok "Servicio $1" || salida_fail "Servicio $1"
}

main() {
    comprobar_ping google.com
    comprobar_servicio ssh
}

main "$@"

Esto es muy real.


11. Práctica guiada (20–30 minutos)

11.1. Crear script con 2 funciones

nano funciones.sh

Dentro:

#!/bin/bash

saludo() {
    echo "Hola $1"
}

cuadrado() {
    local num=$1
    echo $(( num * num ))
}

saludo "Tomas"
echo "El cuadrado de 6 es: $(cuadrado 6)"

11.2. Crear un mini menú con funciones

nano menu_func.sh
#!/bin/bash

mostrar_fecha() { date; }
mostrar_usuarios() { who; }

case $1 in
    fecha) mostrar_fecha ;;
    usuarios) mostrar_usuarios ;;
    *) echo "Uso: $0 {fecha|usuarios}" ;;
esac

12. Checklist del Día 5

  • Creas funciones
  • Usas variables locales
  • Pasas argumentos a funciones
  • Devuelves valores con echo
  • Usas return para códigos de salida
  • Tienes un script organizado
  • Sabes usar main() y secciones

Si todo está marcado → Día 5 superado.


13. Ejercicio sugerido

Crea un script llamado:

server_check.sh

Con funciones:

  1. check_ping host
  2. check_dns host
  3. check_puerto host port
  4. main() que llame a las 3 funciones para una lista de hosts pasada por argumento o archivo

Esto prepara el gran proyecto final del Día 7.


14. Día 5 completado

Ahora tus scripts son modulares, profesionales y mantenibles.
Este es el salto grande que separa a un “usuario que copia scripts” de un técnico capaz de crearlos y mantenerlos.

Mañana llega un día importantísimo:

👉 Día 6 – Redirecciones, pipes, ejecución segura (>, >>, 2>, |, &&, ||)

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