Mario Alejandro Crespo Reyes
Desintalar postres, alguien más lo noto ?
Denisse Godoy
Había hambre, jajajaja.
Enzo Venturi
Jaja
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.
¿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.
Mario Alejandro Crespo Reyes
Desintalar postres, alguien más lo noto ?
Denisse Godoy
Había hambre, jajajaja.
Enzo Venturi
Jaja
Enzo Venturi
Tomas Marengo
El tema está finalizando
Joan Benavides Olivera
Script escrito y probado en Ubuntu 18.04
#Requisitos regex_option='^[1-5]{1}'
#Variables locales option=0
#functions install_postgres () { echo "Instalando Postgres ..." }
uninstall_postgres () { echo "Desinstalando Postgres ..." }
create_backup () { read -p "Enter the name of the file: " backup_filename echo "Creando el backup '$backup_filename' en $(pwd) ..." }
restore_backup () { read -p "Enter the name of the backup's file: " backup_filename echo "Restaurando el backup '$backup_filename' ..." }
get_exit () { echo -e "Saliendo ...\n" }
wrong_option () { echo "Las options deben ser 1-5" }
while : do #Limpiar la pantalla clear #Mostrar el menu de opciones echo "----------------------------------------" echo "PGUTIL - Programa de utilidades Postgres" echo "----------------------------------------" echo " Menu Principal " echo "----------------------------------------" echo "1.Instalar Postgres" echo "2.Desinstalar Postgres" echo "3.Hacer un bakcup" echo "4.Restaurar el backup" echo "5.Salir."
#Leer la opcion del usuario (capturar datos) y verificarla echo -e "" read -n1 -p "Introduce un opcion del menu: " option echo -e "" if [[ $option =~ $regex_option ]]; then #Validar la opcion introducida case $option in 1) install_postgres sleep 3 #Delay the CLI action for 3 secs ;; 2) uninstall_postgres sleep 3 #Delay the CLI action for 3 secs ;; 3) create_backup sleep 3 #Delay the CLI action for 3 secs ;; 4) restore_backup sleep 3 #Delay the CLI action for 3 secs ;; 5) get_exit sleep 1 #Delay the CLI action for 1 secs #break exit 0 #salir del bucle ;; esac else wrong_option sleep 3 fi
done
Jose Suarez
Llegamos al tema mas importante XD
Jose Suarez
Fredy Mendoza Vargas
Excelente
Juan David Cajamarca Acuña
#!/bin/bash option=0 backup_directory="" restore_directory="" install_postgresql () { echo -e "\nInstalling PostgreSQL..." } uninstall_postgresql () { echo -e "\nUninstalling PostgreSQL..." } backup () { echo -e "\nBackuping..." echo -e "\nBackup directory: $1" } restore_backup () { echo -e "\nRestoring backup..." echo -e "\nRestore directory: $1" } while : do clear echo "-------------------------------------" echo "PGUTIL - PostgreSQL utilities program" echo "-------------------------------------" echo " MAIN MENU " echo "-------------------------------------" echo "1. Install PostgreSQL" echo "2. Uninstall PostgreSQL" echo "3. Backup" echo "4. Restore Backup" echo "5. Exit" read -n1 -p "Enter an option [1-5]: " option case $option in 1) install_postgresql sleep 3 ;; 2) uninstall_postgresql sleep 3 ;; 3) echo -e "\n" read -p "Enter the backup directory: " backup_directory backup $backup_directory sleep 3 ;; 4) echo -e "\n" read -p "Enter the backup restore directory: " restore_directory restore_backup $restore_directory sleep 3 ;; 5) echo -e "\nExiting..." exit 0 ;; esac done
Mario Alexander Vargas Celis
Cristian Camilo Cortes Ortiz
Diego Andrés Beltrán Garavito
# ! /bin/bash # Programa para manejo de utilidades de postgress # Autor Diego Beltran Histagram diegoDevelops opciones=0 # funciones del programa instalar_postgres () { echo "Instalar postgress...." } desinstalar_postgres () { echo "Desinstalar postgress..." } sacar_respaldo () { echo "Sacar respaldo ..." echo "directorio back: $1" } restaurar_respaldo () { echo "restaurar respaldo" echo "directorio resp: $1" } while : do #limpiamos pantalla clear # Despeglar el menu de opciones echo "---------------------------------------------" echo "PGUTIL - Programa de utilidad de postgress" echo "---------------------------------------------" echo " MENU PRINCIPAL " echo "---------------------------------------------" echo "1. Instalar Postgress" echo "2. Desinstalar Postgres" echo "3. Sacar un respaldo" echo "4. Restar respaldo" echo "5. Salir" #Leerlos datos del usuario - capturar informacion read -n1 -p "ingrese una opcion [1 - 5]: " opciones #Validar opcion ingresada case $opciones in 1) instalar_postgres sleep 7 ;; 2) desinstalar_postgres sleep 7 ;; 3) read -p "Directorio de Back" dirBack sacar_respaldo $dirBack sleep 7 ;; 4) read -p "Directorio de Respaldok" dirRest restaurar_respaldo $dirrest sleep 7 ;; 5) echo -e "\nSaliendo del programa ......" exit 0 ;; esac done
valentina stephany kassar acuña
Jesus Silva
Dicho de otra forma.
Las funciones son bloques de condigo que realizan una determinada tarea y que a su vez se pueden utilizar varias veces en nuestro programa.
Marvin Javier Santos Fernández
Ricardo Figueroa
Hasta este punto ya cubrimos miles de temas.
Erick Jarson Pilonieta Corzo
Que buena clase.
Roberto Bravo
DAVID EDUARDO BAEZ SANCHEZ
Listo.
Usuario anónimo
UserEl comando sleep no me funciona... se restablece todo y no me muestra la siguiente operación.
Dividí el programa en dos secciones:
Frontend:
#!/bin/bash source ./backend.sh while : do clear tput rev; tput cup 1 2 echo "MAIN - POSTGRESQL"; tput sgr0 echo -e "\n" echo "1) Install PostgreSQL" echo "2) Uninstall PostgreSQL" echo "3) Generate Backup" echo "4) Restore Backup" echo "5) Exit" echo -e "\n" tput bold; read -p "Enter your choice [1-5]: " Pick case $Pick in 1) sql $Pick; sleep 3;; 2) sql $Pick; sleep 3;; 3) sql $Pick; sleep 3;; 4) sql $Pick; sleep 3;; 5) sql $Pick; exit 0;; esac done
Backend:
#!/bin/bash function sql () { if [ $1 == 1 ]; then echo "Installing..." elif [ $1 == 2 ]; then echo "Uninstalling..." elif [ $1 == 3 ]; then echo "Generating..." elif [ $1 == 4 ]; then echo "Restoring..." else echo "Exiting..." fi } # $1 == $Pick export -f sql ./frontend.sh
# ! /bin/bash # Programa que permite manejar las utilidades de Postres # Autor: Jose Suarez opcion=0 # Función para instalar postgres instalar_postgres () { echo "Instalar postgres..." } # Función para desinstalar postgres desinstalar_postgres () { echo "Desinstalar postres..." } # Función para sacar un respaldo sacar_respaldo () { echo "Sacar respaldo..." echo "Directorio backup: $1" } # Función para restaurar un respaldo restaurar_respaldo () { echo "Restaurar respaldo..." echo "Directorio respaldo: $1" } while : do #Limpiar la pantalla clear #Desplegar el menú de opciones echo "_________________________________________" echo " Programa de Utilidad de Postgres" echo "_________________________________________" echo " MENÚ PRINCIPAL " echo "_________________________________________" echo "1. Instalar Postgres" echo "2. Desinstalar Postgres" echo "3. Sacar un respaldo" echo "4. Restar respaldo" echo "5. Salir" #Leer los datos del usuario - capturar información read -n1 -p "Ingrese una opción [1-5]:" opcion #Validar la opción ingresada case $opcion in 1) instalar_postgres sleep 3 ;; 2) desinstalar_postgres sleep 3 ;; 3) read -p "Directorio Backup:" directorioBackup sacar_respaldo $directorioBackup sleep 3 ;; 4) read -p "Directorio de Respaldos:" directorioRespaldos restaurar_respaldo $directorioRespaldos sleep 3 ;; 5) echo "Salir del Programa" exit 0 ;; esac done
En Bash, puedes crear funciones y pasarles argumentos de manera flexible. Las funciones permiten agrupar comandos y reutilizarlos en diferentes partes de un script, mientras que el paso de argumentos te permite personalizar su comportamiento.
### 1. **Definir una función en Bash**
La estructura básica para definir una función es la siguiente:
nombre\_funcion() {   \# Comandos de la función }
O también puedes usar esta sintaxis equivalente:
function nombre\_funcion {   \# Comandos de la función }
### 2. **Ejemplo de función sin argumentos:**
saludar() {   echo "Hola, bienvenido al script de Bash." } \# Llamada a la función saludar
### 3. **Paso de argumentos a funciones:**
Puedes pasar argumentos a una función como lo harías con un script. Los argumentos se acceden usando variables especiales:
- $1, $2, ..., $N: Se refieren a los argumentos posicionales.
- $0: El nombre de la función.
- $#: El número de argumentos pasados.
- $@: Todos los argumentos como una lista.
#### Ejemplo de función con argumentos:
saludar() {   echo "Hola, $1. Hoy es un gran día para $2." } \# Llamada a la función con argumentos saludar "Carlos" "programar"
Salida:
Hola, Carlos. Hoy es un gran día para programar.
### 4. **Verificar la cantidad de argumentos:**
Puedes verificar cuántos argumentos ha recibido la función usando $#. Aquí tienes un ejemplo:
saludar() {   if \[ $# -lt 2 ]; then   echo "Uso: saludar nombre actividad"   else   echo "Hola, $1. Hoy es un gran día para $2."   fi } \# Llamada a la función con o sin argumentos saludar "Carlos" saludar "Ana" "leer"
### 5. **Usar $@ para iterar sobre todos los argumentos:**
imprimir\_argumentos() {   for arg in "$@"; do   echo "Argumento: $arg"   done } \# Llamada a la función con varios argumentos imprimir\_argumentos "uno" "dos" "tres"
Salida:
Argumento: uno Argumento: dos Argumento: tres
### 6. **Devolver valores desde funciones:**
En Bash, una función no devuelve valores directamente, pero puedes usar el comando return para devolver un código de estado (0 es éxito, cualquier otro número indica error), o puedes usar echo para devolver una cadena de texto que puede ser capturada por la variable de salida.
#### Devolver código de estado:
comprobar\_numero() {   if \[ $1 -gt 10 ]; then   return 0 # Éxito   else   return 1 # Error   fi } \# Llamada a la función y captura de su código de salida comprobar\_numero 15 if \[ $? -eq 0 ]; then   echo "El número es mayor que 10." else   echo "El número es 10 o menor." fi
#### Devolver texto:
obtener\_fecha() {   echo "$(date)" } \# Capturar el valor devuelto por la función fecha\_actual=$(obtener\_fecha) echo "La fecha actual es: $fecha\_actual"
### Resumen:
- Puedes crear funciones en Bash usando nombre\_funcion() { ... }.
- Los argumentos se pasan a las funciones como en los scripts, usando $1, $2, etc.
- Puedes devolver códigos de estado con return o cadenas de texto con echo.
- Usar "$@" permite iterar sobre todos los argumentos de manera eficiente.
Código:
#!/bin/bash # Program that allows to manage the Postgres utilities using functions. # Author: Cristian Camilo - Cristianco9 # Function to install postgres install_postgres () { echo "************************* WAIT *************************" echo "* Installing Postgres... *" sleep 1 echo "************************* DONE *************************" } # Function to uninstall postgres uninstall_postgres () { echo "************************* WAIT *************************" echo "* Uninstalling Postgres... *" sleep 1 echo "************************* DONE *************************" } # Function to do a backup backup () { echo -e "\n************************* WAIT *************************" echo "* Backup in process... *" sleep 1 echo "The backup directory is: $backupDirectory" echo "************************* DONE *************************" } # Function to drop a backup drop_backup () { echo -e "\n************************* WAIT *************************" echo "* Dropping backup... *" sleep 1 echo "The restore directory is: $restoreDirectory" echo "************************* DONE *************************" } # Function to quit quit () { echo -e "\n************************* WAIT *************************" echo "* quitting... *" sleep 1 echo "********************* SCRIPT ENDE **********************" exit 0 } while : do # Display the options menu echo -e "\n************************ SCRIPT ************************" echo "****************** POSTGRES UTILITY ********************" echo "********************** MAIN MENU ***********************" echo "* 1. Install Postgres *" echo "* 2. Uninstall Postgres *" echo "* 3. Do a Backup *" echo "* 4. Drop a Backup *" echo "* 5. Quit *" echo "********************************************************" # Read user's data read -p "Please enter a option: " option while [ $option -lt 1 ] || [ $option -gt 5 ] do echo "******************* INCORRECT VALUE ********************" read -p "Please enter a option: " option done echo "******************** CORRECT VALUE *********************" # Data validation case $option in 1) install_postgres ;; 2) uninstall_postgres ;; 3) read -p "Please enter a backup directory: " backupDirectory backup $backupDirectory ;; 4) read -p "Please enter a restoration directory: " restoreDirectory drop_backup $restoreDirectory ;; 5) quit ;; esac done
Aqui el ejercicio con una peque animacion
opcion=0 dot="." instalar_postgres () { clear for ((i=0; i<=2;i++)) do echo -e "INSTALANDO POSTGRES$dot" dot+="." sleep 1 clear done dot="." echo -e "\nPOSTGRES INSTALADO CORRECTAMENTE" } desinstalar_postgres () { clear for ((i=0; i<=2;i++)) do echo -e "DESINSTALANDO POSTGRES$dot" dot+="." sleep 1 clear done dot="." echo -e "\nPOSTGRES DESINSTALADO CORRECTAMENTE" } obtener_respaldo () { clear for ((i=0; i<=2;i++)) do echo -e "RESPALDANDO INFORMACION$dot" dot+="." sleep 1 clear done echo "ARCHIVOS RESPALDADOS DEL DIRECTORIO $1" dot="." } restaurar () { clear for ((i=0; i<=2;i++)) do echo -e "RESTAURANDO$dot" dot+="." sleep 1 clear done echo "ARCHIVOS RESTAURADOS CORRECTAMENTE" dot="." } while : do #Limpiar pantall clear #Desplegar menu de opciones echo "============================================" echo " PG UTIL -- PROGRAMA UTILITARIO DE POSTGRES " echo "============================================" echo "************** MENU PRINCIPAL **************" echo "============================================" echo "1. INSTALAR POSTGRES" echo "2. DESINSTALAR POSTGRES" echo "3. OBTENER RESPALDO" echo "4. RESTAURAR RESPALDO" echo "5. SALIR" #Leer los datos del usuario - Captura de informacion read -n1 -p "SELECCIONE UNA OPCION [1-5]: " opcion echo -e "\n" sleep 1 #Validar la opcion ingresada case $opcion in 1) instalar_postgres sleep 3 ;; 2) desinstalar_postgres sleep 3 ;; 3) read -p "DIRECTORIO DE BACKUP: " directorioBackup obtener_respaldo directorioBackup sleep 3 ;; 4) restaurar sleep 3 ;; 5) echo "SALIENDO DEL PROGRAMA" sleep 3 clear exit 0 ;; esac done ```opcion=0dot="." instalar\_postgres () { clear for ((i=0; i<=2;i++)) do echo -e "INSTALANDO POSTGRES$dot" dot+="." sleep 1 clear done dot="." echo -e "\nPOSTGRES INSTALADO CORRECTAMENTE"} desinstalar\_postgres () { clear for ((i=0; i<=2;i++)) do echo -e "DESINSTALANDO POSTGRES$dot" dot+="." sleep 1 clear done dot="." echo -e "\nPOSTGRES DESINSTALADO CORRECTAMENTE" } obtener\_respaldo () { clear for ((i=0; i<=2;i++)) do echo -e "RESPALDANDO INFORMACION$dot" dot+="." sleep 1 clear done echo "ARCHIVOS RESPALDADOS DEL DIRECTORIO *$1*" dot="." } restaurar () { clear for ((i=0; i<=2;i++)) do echo -e "RESTAURANDO$dot" dot+="." sleep 1 clear done   echo "ARCHIVOS RESTAURADOS CORRECTAMENTE" dot="."} while :do *#Limpiar pantall* clear *#Desplegar menu de opciones* echo "============================================" echo " PG UTIL -- PROGRAMA UTILITARIO DE POSTGRES " echo "============================================" echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\* MENU PRINCIPAL \*\*\*\*\*\*\*\*\*\*\*\*\*\*" echo "============================================" echo "1. INSTALAR POSTGRES" echo "2. DESINSTALAR POSTGRES" echo "3. OBTENER RESPALDO" echo "4. RESTAURAR RESPALDO" echo "5. SALIR"   *#Leer los datos del usuario - Captura de informacion* read -n1 -p "SELECCIONE UNA OPCION \[1-5]: " opcion echo -e "\n" sleep 1   *#Validar la opcion ingresada* case $opcion in 1) instalar\_postgres sleep 3 ;; 2) desinstalar\_postgres sleep 3 ;; 3) read -p "DIRECTORIO DE BACKUP: " directorioBackup obtener\_respaldo directorioBackup sleep 3 ;; 4) restaurar sleep 3 ;; 5) echo "SALIENDO DEL PROGRAMA" sleep 3 clear exit 0 ;; esacdone