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:
# 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:
mi_funcionLos argumentos se manejan igual que en un script:
| Variable | Significado |
|---|---|
$1 |
Primer argumento |
$2 |
Segundo argumento |
$@ |
Todos los argumentos |
$# |
Cantidad de argumentos |
Ejemplo:
saludar() {
echo "Hola $1 $2"
}
saludar "Francisco" "Vélez"
# → Hola Francisco VélezEn Bash, return solo devuelve códigos de salida (= éxito, ≠0 = error).
Para devolver datos reales se usa echo y captura de comandos:
sumar() {
echo $(( $1 + $2 ))
}
resultado=$(sumar 5 7)
echo "La suma es: $resultado"
# → La suma es: 12Por defecto, todas las variables son globales.
Para que existan solo dentro de la función, usa local.
mensaje="Hola mundo"
cambiar() {
local mensaje="Soy local"
echo "Dentro: $mensaje"
}
echo "Antes: $mensaje"
cambiar
echo "Después: $mensaje"Diferencias clave:
| Tipo | Alcance | Vida útil |
|---|---|---|
| Global | Todo el script | Hasta que termina el script |
| Local | Solo dentro de la función | Se destruye al salir de la función |
Usa local para evitar modificar variables globales sin querer.
Cuando ejecutas un script, puedes pasarle argumentos:
#!/bin/bash
echo "Hola $1"Ejecución:
bash script.sh Francisco
# → Hola FranciscoVariables especiales:
| Variable | Significado |
|---|---|
$0 |
Nombre del script |
$1, $2... |
Argumentos individuales |
$# |
Número de argumentos |
$@ |
Todos los argumentos como lista |
$* |
Todos los argumentos como una sola cadena |
Validar número de argumentos:
if [ $# -ne 2 ]; then
echo "Uso: $0 num1 num2"
exit 1
fiValidar argumento vacío:
if [ -z "$1" ]; then
echo "Error: falta argumento"
exit 1
fiValidar que sea un número:
if ! [[ "$1" =~ ^[0-9]+$ ]]; then
echo "Error: $1 no es un número"
exit 1
fifor arg in "$@"; do
echo "Argumento: $arg"
doneshift elimina el primer argumento ($1) y mueve los demás a la izquierda.
while [ $# -gt 0 ]; do
echo "Actual: $1"
shift
doneshift 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| Concepto | Clave |
|---|---|
| Definir función | nombre() { ... } |
| Llamar función | nombre |
| Argumentos | $1, $2, $@, $# |
| Devolver valor | echo + $(comando) |
| Variable local | local nombre=valor |
| Recorrer argumentos | for arg in "$@" o while [ $# -gt 0 ]; do ...; shift; done |
Autor: Fravelz