Crear funciones y Paso de Argumentos
Clase 39 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Clase 39 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Marconi Poveda
Reinaldo Mendoza
Mario Alejandro Crespo Reyes
Denisse Godoy
Enzo Venturi
Enzo Venturi
Tomas Marengo
Joan Benavides Olivera
Jose Suarez
Jose Suarez
Fredy Mendoza Vargas
Juan David Cajamarca Acuña
Mario Alexander Vargas Celis
Cristian Camilo Cortes Ortiz
Diego Andrés Beltrán Garavito
valentina stephany kassar acuña
Jesus Silva
Marvin Javier Santos Fernández
Ricardo Figueroa
Erick Jarson Pilonieta Corzo
Roberto Bravo
DAVID EDUARDO BAEZ SANCHEZ
Usuario anónimo
Me queda súper claro que está instalando Postgres :facepalm:
#Función para instalar postgres instalar_postgres () { echo "Instalando Postgres..." }
jaja, buen tema esa explicación del tema para entender mejor el tema
Desintalar postres, alguien más lo noto ?
Había hambre, jajajaja.
Jaja
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
El tema está finalizando
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
Llegamos al tema mas importante XD
# ! /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
Excelente
#!/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
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
# ! /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
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.
Hasta este punto ya cubrimos miles de temas.
Que buena clase.
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
Listo.
El comando sleep no me funciona... se restablece todo y no me muestra la siguiente operación.