Saltar al contenido principal

7. Funciones en Bash

Introducción a las Funciones

  • Descripción: Una función es un bloque de código que se puede reutilizar en un script. Permite organizar y estructurar mejor el código, evitando la repetición y facilitando el mantenimiento.
  • Definición de funciones:
    • Sintaxis:
      nombre_de_la_función() {
      # comandos
      }
    • Ejemplo básico:
      decir_hola() {
      echo "¡Hola, Mundo!"
      }

      decir_hola # Llamada a la función

Parámetros en Funciones

  • Descripción: Las funciones pueden aceptar parámetros, que se pasan al momento de llamar la función.
  • Acceso a parámetros:
    • $1, $2, $3, etc.: Representan el primer, segundo, tercer parámetro, respectivamente.
    • $@: Todos los parámetros.
    • $#: Número de parámetros.
    • Ejemplo:
      saludar() {
      echo "Hola, $1"
      }

      saludar "Rafa" # Llamada a la función con un parámetro

Retorno de Valores

  • Descripción: Las funciones pueden devolver valores usando el comando return.
  • Sintaxis:
    • return: Devuelve un valor de estado (0 indica éxito, otros valores indican error).
    • Ejemplo:
      suma() {
      resultado=$(( $1 + $2 ))
      return $resultado
      }

      suma 3 4
      echo "La suma es $?" # Imprime el valor devuelto por la función

Ámbito de las Variables

  • Descripción: Las variables definidas dentro de una función son locales a esa función a menos que se declare lo contrario.
  • Local vs Global:
    • local: Declara una variable local dentro de una función.
    • Ejemplo:
      ejemplo() {
      local var_local="Soy local"
      var_global="Soy global"
      }

      ejemplo
      echo $var_global # Imprime "Soy global"
      echo $var_local # No imprime nada, ya que var_local es local a la función

Funciones Recursivas

  • Descripción: Una función que se llama a sí misma para resolver un problema en varias etapas.
  • Ejemplo:
    factorial() {
    if [ $1 -le 1 ]; then
    echo 1
    else
    echo $(( $1 * $(factorial $(( $1 - 1 )) ) ))
    fi
    }

    resultado=$(factorial 5)
    echo "El factorial de 5 es $resultado"

Ejercicios de Funciones en Bash

Ejercicio 1: Definición de Funciones

1.1 Escribe una función que imprima "¡Hola, Mundo!" y llámala desde un script.

1.2 Escribe una función que acepte un nombre como parámetro e imprima "Hola, [nombre]". Llámala con diferentes nombres.

Ejercicio 2: Parámetros en Funciones

2.1 Escribe una función que acepte dos números como parámetros y devuelva su suma.

2.2 Escribe una función que acepte dos números como parámetros y almacene su suma en una variable global e imprima el resultado.

Ejercicio 3: Retorno de Valores

3.1 Escribe una función que acepte dos números como parámetros y devuelva el mayor de ellos.

3.2 Escribe una función que calcule el cuadrado de un número y devuelva el resultado.

Ejercicio 4: Alcance de Variables

4.1 Escribe una función que defina una variable local y otra global. Llama a la función y muestra la diferencia de alcance.

Ejercicio 5: Funciones Recursivas

5.1 Escribe una función recursiva para calcular el factorial de un número.

5.2 Escribe una función recursiva que devuelva el n-ésimo número de la serie de Fibonacci.

Ejercicios con soluciones de Funciones en Bash

Ejercicio 1: Definición de Funciones

1.1 Escribe una función que imprima "¡Hola, Mundo!" y llámala desde un script.

  • Solución:
decir_hola() {
echo "¡Hola, Mundo!"
}

decir_hola

1.2 Escribe una función que acepte un nombre como parámetro e imprima "Hola, [nombre]". Llámala con diferentes nombres.

  • Solución:
saludar() {
echo "Hola, $1"
}

saludar "Rafa"
saludar "Adrián"

Ejercicio 2: Parámetros en Funciones

2.1 Escribe una función que acepte dos números como parámetros y devuelva su suma.

  • Solución:
suma() {
echo $(( $1 + $2 ))
}

suma 3 4

2.2 Escribe una función que acepte dos números como parámetros y almacene su suma en una variable global e imprima el resultado.

  • Solución:
suma() {
resultado=$(( $1 + $2 ))
echo $resultado
}

suma 3 4

Ejercicio 3: Retorno de Valores

3.1 Escribe una función que acepte dos números como parámetros y devuelva el mayor de ellos.

  • Solución:
mayor() {
if [ $1 -gt $2 ]; then
echo $1
else
echo $2
fi
}

mayor 10 20

3.2 Escribe una función que calcule el cuadrado de un número y devuelva el resultado.

  • Solución:
cuadrado() {
echo $(( $1 * $1 ))
}

resultado=$(cuadrado 5)
echo "El cuadrado de 5 es $resultado"

Ejercicio 4: Alcance de Variables

4.1 Escribe una función que defina una variable local y otra global. Llama a la función y muestra la diferencia de alcance.

  • Solución:
ejemplo() {
local var_local="Soy local"
var_global="Soy global"
}

ejemplo
echo $var_global # Imprime "Soy global"
echo $var_local # No imprime nada, ya que var_local es local a la función

Ejercicio 5: Funciones Recursivas

5.1 Escribe una función recursiva para calcular el factorial de un número.

  • Solución:
factorial() {
if [ $1 -le 1 ]; then
echo 1
else
echo $(( $1 * $(factorial $(( $1 - 1 )) ) ))
fi
}

resultado=$(factorial 5)
echo "El factorial de 5 es $resultado"

5.2 Escribe una función recursiva que devuelva el décimo número de la serie de Fibonacci.

  • Solución:
fibonacci() {
if [ $1 -le 0 ]; then
echo 0
elif [ $1 -eq 1 ]; then
echo 1
else
echo $(( $(fibonacci $(( $1 - 1 )) ) + $(fibonacci $(( $1 - 2 )) ) ))
fi
}

resultado=$(fibonacci 10)
echo "El 10º número de la serie de Fibonacci es $resultado"