Skip to content

Funciones

Funciones, Variables y Argumentos en Bash Script

Section titled “Funciones, Variables y Argumentos en Bash Script”

Este documento explica como usar funciones, variables globales y locales, y argumentos.


En Bash, una función agrupa comandos que puedes reutilizar. Existen dos formas equivalentes:

Terminal window
# Forma 1 (más común)
mi_funcion() {
echo "Hola desde la función"
# Forma 2 (menos usada)
function mi_funcion2 }
echo "Hola desde la función 2"

Llamar una función:

Terminal window
mi_funcion

Los argumentos se manejan igual que en un script:

Ejemplo:

Terminal window
saludar() {
echo "Hola $1 $2"
saludar "Francisco" "Vélez"
# → Hola Francisco Vélez

En Bash, return solo devuelve códigos de salida (= éxito, ≠0 = error). Para devolver datos reales se usa echo y captura de comandos:

Terminal window
sumar() {
echo $(( $1 + $2 ))
resultado=$(sumar 5 7)
echo "La suma es: $resultado"
# → La suma es: 12

Por defecto, todas las variables son globales. Para que existan solo dentro de la función, usa local.

Terminal window
mensaje="Hola mundo"
cambiar() {
local mensaje="Soy local"
echo "Dentro: $mensaje"
echo "Antes: $mensaje"
cambiar
echo "Después: $mensaje"

Diferencias clave:

Usa local para evitar modificar variables globales sin querer.


Cuando ejecutas un script, puedes pasarle argumentos:

#!/bin/bash
echo "Hola $1"

Ejecución:

Terminal window
bash script.sh Francisco
# → Hola Francisco

Variables especiales:


Validar número de argumentos:

Terminal window
if [ $# -ne 2 ]; then
echo "Uso: $0 num1 num2"
exit 1
fi

Validar argumento vacío:

Terminal window
if [ -z "$1" ]; then
echo "Error: falta argumento"
exit 1
fi

Validar que sea un número:

Terminal window
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
echo "Error: $1 no es un número"
exit 1
fi

Terminal window
for arg in "$@"; do
echo "Argumento: $arg"
done

shift elimina el primer argumento ($1) y mueve los demás a la izquierda.

Terminal window
while [ $# -gt 0 ]; do
echo "Actual: $1"
shift
done

shift 2 eliminaría los dos primeros argumentos de golpe.


#!/bin/bash
sumar() { echo $(( $1 + $2 )); }
restar() { echo $(( $1 - $2 )); }
if [ $# -lt 3 ]; then
echo "Uso: $0 [suma|resta] num1 num2"
exit 1
fi
op=$1
shift
case $op in
suma) echo "Resultado: $(sumar $1 $2)" ;;
resta) echo "Resultado: $(restar $1 $2)" ;;
*) echo "Operación inválida" ;;
esac