Contenido
Los scripts que has hecho hasta ahora funcionan bien, pero tienen un problema: si el código crece, se convierte en algo difícil de mantener, leer y modificar. Las funciones solucionan esto al permitir reutilizar código y dividirlo en partes más pequeñas.
Este módulo te enseñará a definir funciones, pasar argumentos, devolver valores y modularizar scripts más complejos.
1. ¿Qué es una función en Bash?
Una función es un bloque de código con nombre propio que puedes ejecutar cuando quieras, tantas veces como quieras.
En pseudolenguaje:
definir función → hacer algo
llamar función → ejecuta ese algo
2. Sintaxis para definir funciones
Bash acepta dos sintaxis equivalentes:
Forma 1:
nombre_funcion() {
comandos
}
Forma 2:
function nombre_funcion {
comandos
}
Ambas son válidas. Lo más usado es la primera por ser más limpia.
3. Llamar a una función
Una vez definida, basta con usar su nombre:
mi_funcion
Ejemplo:
saludar() {
echo "Hola desde la función"
}
saludar
Salida:
Hola desde la función
4. Funciones con parámetros
Las funciones pueden recibir argumentos igual que el script completo.
Ejemplo:
saludar() {
echo "Hola $1"
}
saludar "Laura"
Salida:
Hola Laura
Si deseas más parámetros:
$1→ primer argumento$2→ segundo$@→ todos
5. Funciones que devuelven valores
En Bash una función no “devuelve” valores como en otros lenguajes. Lo más común es:
- Imprimir en pantalla
- Guardar en variables
- O usar
returnsolo para códigos numéricos (0–255)
5.1 Método estándar (captura por sustitución)
sumar() {
echo $(( $1 + $2 ))
}
resultado=$(sumar 3 4)
echo "Resultado: $resultado"
Salida:
Resultado: 7
5.2 return (solo numérico)
comparar() {
if [ $1 -gt $2 ]; then
return 0
else
return 1
fi
}
comparar 10 5
if [ $? -eq 0 ]; then
echo "El primero es mayor"
fi
6. Variables locales vs globales
Por defecto, las variables en Bash son globales dentro del script.
Para limitar su alcance dentro de la función, usa local:
prueba() {
local mensaje="Hola"
echo "$mensaje"
}
prueba
echo "$mensaje" # Está vacía fuera de la función
7. Organización modular del código
A partir de ahora puedes:
- Definir varias funciones en un mismo script
- Usar funciones como “bloques” lógicos
- Separar responsabilidades
Ejemplo de script modular:
mostrar_menu() {
echo "1) Fecha"
echo "2) Usuario"
echo "3) Salir"
}
procesar_opcion() {
case $1 in
1) date ;;
2) echo $USER ;;
3) exit ;;
*) echo "Opción inválida" ;;
esac
}
mostrar_menu
read -p "Opción: " op
procesar_opcion $op
8. Incluir funciones desde otros archivos (source)
Esto permite crear “librerías” de funciones.
Por ejemplo, en utils.sh:
saludar() {
echo "Hola $1"
}
En otro script:
source utils.sh
saludar "Carlos"
Esto se usa para:
- reutilizar código
- crear módulos de funciones
- evitar duplicar scripts
9. Ejemplos
Ejemplo 1: Función suma
sumar() {
echo $(( $1 + $2 ))
}
resultado=$(sumar 5 3)
echo "Resultado: $resultado"
Ejemplo 2: Librería simple
log.sh:
log() {
echo "[LOG] $1"
}
test.sh:
source log.sh
log "Esto es una prueba"
Ejemplo 3: Comprobador de archivos
existe() {
if [ -f "$1" ]; then
echo "El archivo existe"
else
echo "No existe"
fi
}
existe "/etc/passwd"
Ejercicios propuestos
Ejercicio 1:
Crear un script matematicas.sh con funciones:
sumarrestar
Cada función recibe 2 números y muestra el resultado.
Ejercicio 2:
Crear un script saludos.sh con una función saludar que reciba un nombre y muestre:
Hola, <nombre>
Ejercicio 3:
Crear un script menu.sh con una función menu que muestre:
- Mostrar fecha
- Mostrar usuario
- Salir
Y llame a otras funciones según la opción.
Ejercicio 4:
Crear un archivo utilidades.sh con una función log que agregue un mensaje a un archivo registro.txt.
Luego crear un script test.sh que llame a log usando source.
Soluciones
✅ Ejercicio 1 — matematicas.sh
Enunciado:
Crear un script matematicas.sh con funciones:
sumarrestar
Cada función recibe 2 números y muestra el resultado.
💡 Solución:
#!/bin/bash
# Script: matematicas.sh
# Funciones para sumar y restar dos números
sumar() {
# $1 y $2 son los parámetros de la función
resultado=$(( $1 + $2 ))
echo "La suma de $1 + $2 es $resultado"
}
restar() {
resultado=$(( $1 - $2 ))
echo "La resta de $1 - $2 es $resultado"
}
# Ejemplos de uso (se pueden sustituir por lectura de parámetros)
sumar 10 5
restar 10 5
Si quieres que usen parámetros del script en lugar de valores fijos:
#!/bin/bash
sumar() {
echo "La suma de $1 + $2 es $(( $1 + $2 ))"
}
restar() {
echo "La resta de $1 - $2 es $(( $1 - $2 ))"
}
sumar "$1" "$2"
restar "$1" "$2"
✅ Ejercicio 2 — saludos.sh
Enunciado:
Crear un script saludos.sh con una función saludar que reciba un nombre y muestre:
Hola, <nombre>
💡 Solución:
#!/bin/bash
# Script: saludos.sh
# Función saludar que recibe un nombre
saludar() {
nombre="$1"
echo "Hola, $nombre"
}
# Ejemplo 1: pasar el nombre como parámetro al script
# saludar "$1"
# Ejemplo 2: pedirlo por teclado
read -p "Introduce tu nombre: " nom
saludar "$nom"
✅ Ejercicio 3 — menu.sh
Enunciado:
Crear un script menu.sh con una función menu que muestre:
- Mostrar fecha
- Mostrar usuario
- Salir
Y llame a otras funciones según la opción.
💡 Solución:
#!/bin/bash
# Script: menu.sh
# Menú con funciones para organizar el código
mostrar_fecha() {
echo "Fecha actual: $(date +"%Y-%m-%d %H:%M:%S")"
}
mostrar_usuario() {
echo "Usuario actual: $USER"
}
menu() {
echo "==== MENÚ ===="
echo "1) Mostrar fecha"
echo "2) Mostrar usuario"
echo "3) Salir"
}
# Bucle para que el menú se repita hasta salir
while true; do
menu
read -p "Elige una opción: " opcion
case "$opcion" in
1) mostrar_fecha ;;
2) mostrar_usuario ;;
3) echo "Saliendo..."; exit 0 ;;
*) echo "Opción no válida" ;;
esac
echo # línea en blanco para separar
done
✅ Ejercicio 4 — utilidades.sh + test.sh
Enunciado:
- Crear un archivo
utilidades.shcon una funciónlogque agregue un mensaje a un archivoregistro.txt. - Crear un script
test.shque llame alogusandosource.
💡 utilidades.sh
#!/bin/bash
# Archivo: utilidades.sh
# Contiene funciones reutilizables
log() {
mensaje="$1"
fecha=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$fecha] $mensaje" >> registro.txt
}
Importante: este archivo no se ejecuta solo, se “incluye” desde otros scripts.
💡 test.sh
#!/bin/bash
# Script: test.sh
# Usa la función log de utilidades.sh
# Cargar funciones desde utilidades.sh
source ./utilidades.sh
log "Inicio de la ejecución de test.sh"
echo "He escrito una línea en registro.txt"
# Puedes añadir más registros
log "Otra acción importante realizada"
Al ejecutar:
chmod +x test.sh
./test.sh
Contenido de registro.txt (ejemplo):
[2026-01-11 19:30:01] Inicio de la ejecución de test.sh
[2026-01-11 19:30:01] Otra acción importante realizada






![11. [Reto] Bash Incremental: Aprender Shell a Golpes de Ejemplos 021c8028-9a76-4b0a-90e1-d0617edc9d94](https://laaventuradeaprender.com/wp-content/uploads/2026/01/021c8028-9a76-4b0a-90e1-d0617edc9d94.webp)

