Curso de Shell Scripting

Una función es un bloque de código con un nombre que puedes llamar varias veces dentro de tu script. Esto evita repetir código y hace que los scripts sean más fáciles de leer y mantener.


6.1. Declaración de funciones

Existen dos formas válidas en Bash:

1# Forma 1 (recomendada)
2saludar() {
3  echo "Hola mundo"
4}
5
6# Forma 2
7function saludar {
8  echo "Hola mundo"
9}

✅ La forma 1 es más estándar y funciona en Bash y otros shells modernos.


6.2. Llamar a una función

1saludar      # Llama a la función

6.3. Parámetros en funciones

Puedes pasar argumentos a la función igual que a un script.

1saludar() {
2  echo "Hola, $1"
3  echo "Tu edad es $2"
4}
5
6saludar "Angel" 25

Salida:

Hola, Angel
Tu edad es 25

Variables especiales en funciones

  • $1, $2 … → argumentos
  • $# → cantidad de argumentos
  • $@ → todos los argumentos
  • $? → estado de salida del último comando

6.4. Variables locales

Para evitar que las variables de una función interfieran con el resto del script, usa local.

1incrementar() {
2  local x=$1
3  ((x++))
4  echo $x
5}
6
7NUM=10
8echo "Antes: $NUM"
9NUM=$(incrementar "$NUM")
10echo "Después: $NUM"

Salida:

Antes: 10
Después: 11

6.5. Valores de retorno

Una función puede:

  • Retornar un código de salida (return N) → solo enteros (0 = éxito, ≠0 = error).
  • Imprimir un valor (con echo) y capturarlo → más flexible.

Ejemplo con return:

1es_par() {
2  if (( $1 % 2 == 0 )); then
3    return 0    # éxito
4  else
5    return 1    # fallo
6  fi
7}
8
9if es_par 6; then
10  echo "Es par"
11else
12  echo "Es impar"
13fi

Salida:

Es par

Ejemplo con echo:

1sumar() {
2  echo $(( $1 + $2 ))
3}
4
5resultado=$(sumar 5 7)
6echo "La suma es $resultado"

Salida:

La suma es 12

6.6. Organización en múltiples archivos (modularización)

En proyectos grandes, conviene separar funciones en archivos y “cargarlos” cuando se necesiten usando source o ..


▸ Estructura de ejemplo

mi_proyecto/
├── bin/
│   └── main.sh
└── lib/
    └── funciones.sh

▸ lib/funciones.sh

1#!/usr/bin/env bash
2
3saludar() {
4  echo "Hola, $1! Bienvenido al curso."
5}
6
7sumar() {
8  echo $(( $1 + $2 ))
9}

▸ bin/main.sh

1#!/usr/bin/env bash
2set -Eeuo pipefail
3
4# Importar funciones
5source "$(dirname "$0")/../lib/funciones.sh"
6
7saludar "Angel"
8
9resultado=$(sumar 5 8)
10echo "La suma es: $resultado"

▸ Ejecutar

1chmod +x bin/main.sh
2./bin/main.sh

Salida:

Hola, Angel! Bienvenido al curso.
La suma es: 13

6.7. Buenas prácticas con funciones

  1. ✅ Usa nombres descriptivos: crear_backup, calcular_media
  2. ✅ Declara variables internas como local.
  3. ✅ Haz que las funciones sean pequeñas y enfocadas.
  4. ✅ Documenta con comentarios sobre qué hace cada función.
  5. ✅ Evita usar exit dentro de funciones (mejor retornar un código).

🏋️‍♂️ Ejercicio práctico 1

Crea un proyecto llamado calculadora con la siguiente estructura:

calculadora/
├── bin/
│   └── main.sh
└── lib/
    └── operaciones.sh

El archivo operaciones.sh debe tener funciones para:

  • sumar
  • restar
  • multiplicar
  • dividir (usa bc -l para división decimal)

El main.sh debe:

  1. Mostrar un menú al usuario para elegir la operación.
  2. Pedir dos números.
  3. Llamar a la función correspondiente.
  4. Mostrar el resultado.

🏋️‍♂️ Ejercicio práctico 2

Crea un proyecto llamado gestion_usuarios con:

  • Una función agregar_usuario que cree un archivo con el nombre del usuario.
  • Una función listar_usuarios que muestre todos los archivos (usuarios).
  • Un menú interactivo que permita al usuario elegir entre agregar o listar.
  • Loading...