Logo de fravelz

Notas de Hacking

Fravelz

Funciones, Variables y Argumentos en Bash Script

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


1. Definición de funciones {#1-definición-de-funciones}

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_funcion

2. Parámetros en funciones {#2-parámetros-en-funciones}

Los argumentos se manejan igual que en un script:

Ejemplo:

saludar() {
echo "Hola $1 $2"

saludar "Francisco" "Vélez"
# → Hola Francisco Vélez

3. Devolver valores {#3-devolver-valores}

En 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: 12

4. Variables Globales y Locales {#4-variables-globales-y-locales}

Por 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:

Usa local para evitar modificar variables globales sin querer.


5. Argumentos en scripts {#5-argumentos-en-scripts}

Cuando ejecutas un script, puedes pasarle argumentos:

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

Ejecución:

bash script.sh Francisco
# → Hola Francisco

Variables especiales:


6. Validaciones útiles {#6-validaciones-útiles}

Validar número de argumentos:

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

Validar argumento vacío:

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

Validar que sea un número:

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

7. Recorrer argumentos {#7-recorrer-argumentos}

Con for {#con-for}

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

Con shift {#con-shift}

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

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

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


8. Ejemplo práctico: mini calculadora {#8-ejemplo-práctico-mini-calculadora}

#!/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

En resumen {#en-resumen}