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
- Sintaxis:
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"