Crear funciones y Paso de Argumentos
Clase 39 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Programación Shell Básica
Script Interactivos
Condicionales
Iteración
Archivos
Empaquetamiento
Funciones
Cierre del curso
Aprende a estructurar funciones en Bash con confianza: define, llama y pasa argumentos dentro de un menú de opciones. Aquí verás cómo organizar el código, documentarlo con comentarios y validar el flujo desde la captura de datos hasta la impresión de parámetros, usando ejemplos como instalar/desinstalar Postgres y gestionar respaldos.
¿Qué es una función en Bash y cómo se define?
Una función en Bash se declara con un nombre, paréntesis vacíos y llaves. No se ponen argumentos en los paréntesis; todo el código va dentro de las llaves. Además, deben declararse antes de ser llamadas para evitar errores en su uso. Es clave mantener los espacios correctos y añadir comentarios descriptivos del propósito.
¿Cómo crear funciones para Postgres y respaldos?
A partir del menú de opciones existente, se definen funciones específicas para cada acción. Se usa echo para mostrar mensajes y comentarios para documentar su objetivo.
# Función para instalar Postgres
instalar_postgres() {
# Función para instalar Postgres.
echo "Instalar Postgres"
}
# Función para desinstalar Postgres
desinstalar_postgres() {
# Función para desinstalar Postgres.
echo "Desinstalar Postgres"
}
# Función para sacar un respaldo
sacar_respaldo() {
# Función para sacar un respaldo.
echo "Sacar respaldo"
echo "Directorio de respaldo: $1"
}
# Función para restaurar un respaldo
restaurar_respaldo() {
# Función para restaurar un respaldo.
echo "Restaurar respaldo"
echo "Directorio de backup: $1"
}
¿Cómo llamar funciones desde un menú de opciones con case?
Se integra el flujo en el menú: cada opción ejecuta la función correspondiente. Así se sustituye el texto dentro de case por llamadas a funciones.
case "$opcion" in
1) instalar_postgres ;;
2) desinstalar_postgres ;;
3) sacar_respaldo "$directorio_backup" ;;
4) restaurar_respaldo "$directorio_backup" ;;
5) exit ;;
*) echo "Opción no válida" ;;
esac
¿Cómo solicitar datos y pasar argumentos a una función?
Para probar el paso de parámetros, se solicita información al usuario y se envía como argumento. Bash permite declarar y asignar variables en el momento de usarlas.
# Solicitar el directorio de backup y pasarlo como argumento
read -p "Cuál es el directorio de backup: " directorio_backup
# Enviar el parámetro a las funciones
sacar_respaldo "$directorio_backup"
restaurar_respaldo "$directorio_backup"
En las funciones, el valor recibido se accede con $1 y se imprime para verificar que llegó correctamente.
¿Qué prácticas y notas debes considerar?
El enfoque se centra en construir el esqueleto de funciones y probar el paso de argumentos antes de implementar la lógica completa. Se reutiliza el menú de opciones y se prepara el terreno para el reto final del módulo.
- Definir primero, llamar después: las funciones deben declararse al inicio del script.
- Documentar con comentarios: explica qué hace cada función.
- Cuidar los espacios: evita errores por sintaxis en Bash.
- Variables flexibles: puedes crear y asignar en línea sin declararlas antes.
- Entrada interactiva: solicita el “directorio de backup” y úsalo como parámetro.
- Verificación rápida: imprime $1 dentro de las funciones para validar el flujo.
- Formato de salida: si hace falta, añade saltos con backslash n para mejorar la legibilidad.
- Contexto del entorno: trabajo en servidor Ubuntu y continuidad tras usar rsync en ejercicios previos.
¿Qué reto se propone y cómo aplicarlo?
El reto principal consiste en integrar todo lo aprendido: menú de opciones, funciones bien definidas, captura de datos y paso de argumentos para ejecutar tareas como instalar/desinstalar Postgres y gestionar respaldos. Primero se arma el cuerpo de las funciones y se valida el flujo; luego se implementan los comandos definitivos.
¿Tienes dudas o quieres compartir tu avance con funciones y parámetros en Bash? Comenta tu experiencia y qué parte del menú automatizaste primero.