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→ éxito1o 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
returnpara 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:
check_ping hostcheck_dns hostcheck_puerto host portmain()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>, |, &&, ||)
