Funciones en scripts de Bash
Organice su código con funciones, fomente la reutilización y haga que sus scripts sean más claros y fáciles de mantener.
Funciones en scripts de Bash es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué son las funciones de Bash?
En los scripts de Bash, una función es un bloque de código que realiza una tarea específica. Piense en ella como un min script dentro de su script principal.
Las funciones le ayudan a:
- Reutilizar código: escribir una parte de la lógica una vez y llamarla varias veces.
- Organizar los scripts: dividir tareas complejas en unidades más pequeñas y manejables.
- Mejorar la legibilidad: hacer que el script sea más fácil de entender y mantener.
Definir una función sencilla
Hay dos formas habituales de definir una función en Bash. Ambas producen el mismo resultado. La primera sintaxis es la más común.
Pruebe a ejecutar este ejemplo. Define funciones, pero todavía no las llama.
#!/bin/bash
# Method 1: The most common way
my_first_func () {
echo "Hello from my_first_func!"
}
# Method 2: Using the 'function' keyword
function my_second_func {
echo "Hello from my_second_func!"
}
echo "Functions defined, but not called."Llamar a sus funciones
Definir una función no la ejecuta. Para ejecutar el código de una función, solo tiene que llamarla por su nombre, como haría con cualquier otro comando.
Observe cómo llamamos a my_function después de definirla:
#!/bin/bash
my_function () {
echo "This message is from inside the function."
}
echo "Script started."
my_function # Call the function here
echo "Script finished."Variables locales en funciones
De forma predeterminada, las variables definidas dentro de una función de Bash son globales, lo que significa que se puede acceder a ellas y modificarlas desde cualquier parte del script.
Para evitar efectos secundarios no deseados y mantener aisladas sus funciones, use la palabra clave local para declarar una variable como local. Las variables locales solo existen dentro de esa función.
#!/bin/bash
global_message="I'm a global message"
my_function () {
local func_message="I'm a local message"
global_message="I've been changed by the function!"
echo "Inside func: $func_message"
echo "Inside func: $global_message"
}
echo "Before func: $global_message"
my_function
echo "After func: $global_message"
echo "After func: $func_message (This will be empty)"Pasar argumentos a las funciones
Puede pasar información a sus funciones mediante argumentos, igual que con los comandos de shell normales. Dentro de la función, se accede a estos argumentos mediante variables especiales:
$1,$2,$3...: argumentos individuales$#: número total de argumentos$@: todos los argumentos como cadenas independientes
#!/bin/bash
greet_user () {
echo "Hello, $1!"
echo "You are $2 years old."
echo "Total arguments received: $#"
echo "All arguments: $@"
}
echo "Calling greet_user with two arguments:"
greet_user "Alice" 30
echo "\nCalling greet_user with one argument:"
greet_user "Bob"Estado de salida de una función (return)
Una función, como cualquier comando, devuelve un estado de salida. Por convención, 0 significa que la ejecución tuvo éxito y cualquier valor distinto de cero indica un error.
Use la palabra clave return para establecer este estado de salida. Después puede comprobarlo mediante la variable especial $?, justo después de llamar a la función.
#!/bin/bash
check_age () {
local age=$1
if [ "$age" -ge 18 ]; then
return 0 # Success: 18 or older
else
return 1 # Failure: under 18
fi
}
check_age 25
echo "Exit status for 25: $?"
check_age 16
echo "Exit status for 16: $?"
if check_age 20; then
echo "User is an adult."
else
echo "User is a minor."
fiCapturar la salida de una función
Mientras que return envía un estado de salida, si quiere que una función produzca un «valor» que pueda almacenarse en una variable, la función debe hacer echo de ese valor en la salida estándar.
Después puede capturar esta salida mediante la sustitución de comandos, colocando la llamada a la función dentro de $(...).
#!/bin/bash
get_full_name () {
local first_name=$1
local last_name=$2
echo "$first_name $last_name" # Echo the full name
}
name="$(get_full_name "John" "Doe")"
echo "Full name captured: $name"
calculate_area () {
local length=$1
local width=$2
echo $((length * width))
}
area=$(calculate_area 10 5)
echo "Calculated area: $area"Ejemplo práctico: un registrador
Este es un ejemplo práctico de una función reutilizable: un registrador sencillo. Puede llamar a esta función desde cualquier parte del script para mostrar mensajes con una marca de tiempo, lo que facilita la depuración y el seguimiento.
#!/bin/bash
log_message () {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
local message="$1"
echo "[$timestamp] $message"
}
log_message "Script execution started."
sleep 1 # Simulate some work
log_message "Processing user data..."
sleep 1
log_message "Operation completed successfully."Buenas prácticas para las funciones
Para escribir scripts claros y fáciles de mantener mediante funciones, tenga en cuenta estos consejos:
- Manténgalo sencillo: cada función debe hacer bien una sola cosa.
- Use nombres descriptivos: utilice nombres como
validate_inputocreate_backup. - Use
local: use siemprelocalpara las variables dentro de las funciones a fin de evitar conflictos. - Añada comentarios: explique qué hace la función, cuáles son sus argumentos y qué devuelve.
- Valide la entrada: si una función espera argumentos específicos, compruébelos.
Comprobar los argumentos de una función
Compruebe que entiende cómo se pasan los argumentos a las funciones de Bash y cómo se accede a ellos dentro de estas.
Funciones: repaso y próximos pasos
¡Excelente trabajo! Ha aprendido a usar las funciones de Bash.
Hemos visto lo siguiente:
- Definir y llamar a funciones.
- Usar
localpara el ámbito de las variables. - Pasar argumentos con
$1,$#y$@. - Establecer el estado de salida con
return. - Capturar la salida con
echoy la sustitución de comandos.
Las funciones son fundamentales para escribir scripts de Bash modulares, reutilizables y fáciles de mantener. ¡Siga practicando para crear scripts más potentes y organizados!
Preguntas frecuentes
¿La lección «Funciones en scripts de Bash» es gratis?
Sí — el texto completo de «Funciones en scripts de Bash» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «Funciones en scripts de Bash»?
Organice su código con funciones, fomente la reutilización y haga que sus scripts sean más claros y fáciles de mantener. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar DevOps Bootcamp?
No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Funciones en scripts de Bash»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?
Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Estructuras de bucle (for, while)
- Funciones en scripts de Bash
- Argumentos y opciones de scripts ($@, $#, getopts)
- La sentencia case y la coincidencia de patrones