Skip to content

Funciones

Bloques reutilizables, local, y los mismos $1/$#/"$@" que en scripts.


Terminal window
mi_funcion() {
echo "Hola desde la función"
}
mi_funcion
ConceptoSignificado
$1, $2, …Argumentos.
$#Cantidad.
"$@"Todos, separados (preferible en bucles).
$*Todos según IFS.
$?Código de salida del último comando.
returnSolo código 0–255, no “valores”.
echo + $()Forma habitual de devolver texto.
localVariable solo dentro de la función.
Terminal window
saludar() {
echo "Hola $1 $2"
}
saludar "Francisco" "Vélez"
sumar() {
echo $(( $1 + $2 ))
}
resultado=$(sumar 5 7) # 12

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

#!/bin/bash
echo "Hola $1"
# bash script.sh Francisco
ConceptoSignificado
$0Ruta/nombre del script.
$1${10}Posicionales.
$#Número de args.
"$@"Lista (bucles).
$$ / $!PID shell / último background.
shiftDescarta $1 y reindexa.
Terminal window
if [ $# -ne 2 ]; then
echo "Uso: $0 num1 num2"
exit 1
fi
[ -z "$1" ] && { echo "falta argumento"; exit 1; }
[[ "$1" =~ ^[0-9]+$ ]] || { echo "no es número"; exit 1; }
for arg in "$@"; do
echo "Argumento: $arg"
done
while [ $# -gt 0 ]; do
echo "Actual: $1"
shift
done

Mini calculadora:

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

Docs: Shell Functions.