Funciones y modularización en Bash
Una función es un bloque de código con un nombre que puedes llamar varias veces dentro de tu script. Esto evita repetir código y hace que los scripts sean más fáciles de leer y mantener.
1. Declaración de funciones #
Existen dos formas válidas en Bash:
1# Forma 1 (recomendada) 2saludar() { 3 echo "Hola mundo" 4} 5 6 # Forma 2 7function saludar { 8 echo "Hola mundo" 9}
✅ La forma 1 es más estándar y funciona en Bash y otros shells modernos.
2. Llamar a una función #
1saludar # Llama a la función
3. Parámetros en funciones #
Puedes pasar argumentos a la función igual que a un script.
1saludar() { 2 echo "Hola, $1" 3 echo "Tu edad es $2" 4} 5 6saludar "Angel" 25
Salida:
Hola, Angel
Tu edad es 25
Variables especiales en funciones #
$1,$2… → argumentos$#→ cantidad de argumentos$@→ todos los argumentos$?→ estado de salida del último comando
4. Variables locales #
Para evitar que las variables de una función interfieran con el resto del script, usa local.
1incrementar() { 2 local x=$1 3 ((x++)) 4 echo $x 5} 6 7NUM=10 8echo "Antes: $NUM" 9NUM=$(incrementar "$NUM") 10echo "Después: $NUM"
Salida:
Antes: 10
Después: 11
5. Valores de retorno #
Una función puede:
- Retornar un código de salida (
return N) → solo enteros (0 = éxito, ≠0 = error). - Imprimir un valor (con
echo) y capturarlo → más flexible.
Ejemplo con return:
1es_par() { 2 if (( $1 % 2 == 0 )); then 3 return 0 # éxito 4 else 5 return 1 # fallo 6 fi 7} 8 9if es_par 6; then 10 echo "Es par" 11else 12 echo "Es impar" 13fi
Salida:
Es par
Ejemplo con echo:
1sumar() { 2 echo $(( $1 + $2 )) 3} 4 5resultado=$(sumar 5 7) 6echo "La suma es $resultado"
Salida:
La suma es 12
6. Organización en múltiples archivos (modularización) #
En proyectos grandes, conviene separar funciones en archivos y “cargarlos” cuando se necesiten usando source o ..
Estructura de ejemplo #
mi_proyecto/
├── bin/
│ └── main.sh
└── lib/
└── funciones.sh
lib/funciones.sh #
1#!/usr/bin/env bash 2 3saludar() { 4 echo "Hola, $1! Bienvenido al curso." 5} 6 7sumar() { 8 echo $(( $1 + $2 )) 9}
bin/main.sh #
1#!/usr/bin/env bash 2set -Eeuo pipefail 3 4 # Importar funciones 5source "$(dirname "$0")/../lib/funciones.sh" 6 7saludar "Angel" 8 9resultado=$(sumar 5 8) 10echo "La suma es: $resultado"
Ejecutar #
1chmod +x bin/main.sh 2./bin/main.sh
Salida:
Hola, Angel! Bienvenido al curso.
La suma es: 13
7. Buenas prácticas con funciones #
- ✅ Usa nombres descriptivos:
crear_backup,calcular_media - ✅ Declara variables internas como
local. - ✅ Haz que las funciones sean pequeñas y enfocadas.
- ✅ Documenta con comentarios sobre qué hace cada función.
- ✅ Evita usar
exitdentro de funciones (mejor retornar un código).
8. Ejercicio práctico 1 #
Crea un proyecto llamado calculadora con la siguiente estructura:
calculadora/
├── bin/
│ └── main.sh
└── lib/
└── operaciones.sh
El archivo operaciones.sh debe tener funciones para:
- sumar
- restar
- multiplicar
- dividir (usa
bc -lpara división decimal)
El main.sh debe:
- Mostrar un menú al usuario para elegir la operación.
- Pedir dos números.
- Llamar a la función correspondiente.
- Mostrar el resultado.
9. Ejercicio práctico 2 #
Crea un proyecto llamado gestion_usuarios con:
- Una función
agregar_usuarioque cree un archivo con el nombre del usuario. - Una función
listar_usuariosque muestre todos los archivos (usuarios). - Un menú interactivo que permita al usuario elegir entre agregar o listar.
Resumen del tema
Conceptos clave #
- Declaración Estándar de Funciones (
nombre() { ... }): bloque reutilizable de instrucciones invocado por su identificador. - Paso de Parámetros Posicionales: acceso mediante
$1,$2, recuento total con$#y lista completa de argumentos con$@. - Ámbito Local (
local variable=valor): aislamiento estricto de variables para evitar efectos secundarios y colisiones en el ámbito global del script. - Mecanismos de Salida en Funciones:
return N: devuelve un código de estado numérico (0 = éxito, >0 = error) para evaluación conif.echo "resultado": devuelve cadenas o datos estructurados mediante captura con sustitución de comandos (RES=$(funcion)).
- Modularización: carga de funciones desde bibliotecas externas mediante
source "$(dirname "$0")/../lib/archivo.sh".
Qué debes recordar #
Declara siempre variables internas con local, usa return para estados de éxito/fallo y modulariza con source para mantener scripts limpios y reutilizables.