No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

4D
3H
37M
26S
Curso de Programaci贸n en Bash Shell

Curso de Programaci贸n en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Funciones sacar y restaurar respaldos en postgres

41/43
Recursos

Aportes 12

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Hola. He modificado un poco el codigo original del profesos haciendo los siguientes cambios:

  1. Al momento de crear un respaldo si el directorio de Respaldo ingresado por el
    usuario no se encuentra se pregunta al Usuario si desea crear un directorio con
    el nombre inicial ingresado.
  2. En el modulo de Restaurar, cambie el orden de los condicionales ya que este
    orden no era el mas optimo. Si el usuario ingresa un Respaldo a Restaurar que no
    se encuentra el programa igual crea la BD en Postgres inclusive si no utiliza el
    respaldo que por supuesto NO fue encontrado lo cual no deberia suceder.
  3. Tambien agregue lineas de codigo para verificar si el directorio donde estan
    los .bak que es ingresado por el usuario existe. De ser asi entonces se listan
    los archivos .bak que alli se encuentran y de ese modo podemos escoger el .bak
    que deseamos restaurar.
  4. Por ultimo agregue al menu la opcion de listar BD en postgres para asi
    facilmente poder consultar sin tener que ir al terminal.
# ! /bin/bash
# Programa para ejemplificar el uso del Break y Continue
#Arnoldo Alvarez

opcion=0
fechaActual=`date +%Y%m%d`

#Esta es la funcion instalar PostGres
instalar_postgres () {
 echo -e "\nVerificar si tenemos instalado PostGress..."
 sleep 3
 verifyInstall=$(which psql)
 if [ $? -eq 0 ]; then
     echo "PostGres ya se encuentra instalado en el equipo "
 else
      read -s -p "Introduzca password de administrador " password
      read -s -p "Introduzca password a utilizar en PostGres " passwordPostgres
      echo "$password" | sudo -S apt update
      echo "$password" | sudo -S apt-get -y install postgresql postgresql-contrib
      sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{$passwordPostgres}';"
      echo "$password" | sudo -S systemctl enable postgresql.service
      echo "$password" | sudo -S systemctl start postgresql.service
 fi

 read -n 1 -s -r -p "Presione [ENTER] para continuar..."

}

#Esta es la funcion desinstalar PostGres
desinstalar_postgres () {
    echo -e "\nVerificando si ya esta Desinstalado Postgres..."
    verifyInstall=$(which psql)
    if [ $? -eq 1 ]; then
        echo " PostGres NO se encuentra instalado en el Equipo "
    else
        read -s -p "Introduzca password de administrador " password
        echo -e "\n"
        echo "$password" | sudo -S systemctl stop postgresql.service
        echo "$password" | sudo -S apt-get -y --purge remove postgresql\*
        echo "$password" | sudo -S rm -r /etc/postgresql
        echo "$password" | sudo -S rm -r /etc/postgresql-common
        echo "$password" | sudo -S rm -r /var/lib/postgresql
        echo "$password" | sudo -S userdel -r postgres
        echo "$password" | sudo -S groupdel postgresql
fi

read -n 1 -s -r -p "Presione [ENTER] para continuar..."

}

#Esta es la funcion Sacar Respaldo
sacar_respaldo () {
echo "Listar las bases de datos..."
sudo -u postgres psql -c "\l"
read -p "Elegir la BD a respaldar: " bddRespaldo
echo -e "\n"
        if [ -d "$1" ]; then
                echo "Establecer permisos directorio"
                echo "$password" | sudo -S chmod 755 $1
                echo "Realizando respaldo..."
                sudo -u postgres pg_dump -Fc $bddRespaldo > "$1/bddRespaldo$fechaActual.bak"
                echo "Respaldo realizado Correctamente en la ubicacion: $1/bddRespaldo$fechaActual.bak"
        else
                echo -e  "\nEl directorio $1 No Existe"
                echo -e "\n"
                read -n1 -p "Desea crear el directorio $1 (s/n)" respbdd
                if [ $respbdd = "s" ]; then
                        sudo mkdir $1
                        echo "$password" | sudo -S chmod 755 $1
                        echo -e "\nRealizando respaldo..."
                        sleep 3
                        sudo -u postgres pg_dump -Fc $bddRespaldo > "$1/bddRespaldo$fechaActual.bak"
                        echo "Respaldo realizado Correctamente en la ubicacion: $1/bddRespaldo$fechaActual.bak"
                else
                        echo -e "\nSaliendo sin realizar Respaldo..."
                        sleep 3
                fi

                fi

read -n 1 -s -r -p "Presione [ENTER] para continuar..."

}

#Esta es la funcion Restaurar Respaldo
restaurar_respaldo () {
read -p "Ingresar el directorio donde se encuentran los respaldos   " directorioBackup
if [ -d $directorioBackup ]; then

echo "Listando los archivos de Respaldos..."
sleep 3
ls -la $directorioBackup
read -p "Ingresar el archivo .bak a restaurar:  " respaldoRestaurar
#echo -e "\n"
if [ -f "$directorioBackup/$respaldoRestaurar" ]; then

        read -p "Ingresar nombre BD destino:  " bdDestino
        verifyBdd= $(sudo -u postgres psql -lqt | cut -d \| -f 1 | grep -wq $bdDestino)
        if [ $? -eq 0 ]; then
                  echo "Restaurando en la Base de Datos destino...$bdDestino"
                  sudo -u postgres pg_restore -Fc -d $bdDestino "$directorioBackup/$respaldoRestaurar"
                  echo "Listar Bases de datos..."
                  sudo -u postgres psql -c "\l"
           else
                  echo  "La BD destino no se encuentra..."
                  echo  "Creando Base de Datos destino..."
                  sleep 4
                  sudo -u postgres psql -c "CREATE DATABASE $bdDestino"
                  sudo -u postgres pg_restore -Fc -d $bdDestino "$directorioBackup/$respaldoRestaurar"
                  echo "Listar Bases de datos..."
                  sudo -u postgres psql -c "\l"
          fi

else
        echo "No se encuentra el archivo de Respaldo Ingresado"
        echo "Verifique nuevamente el nombre y vuelva a intentarlo..."
fi
else
        echo "No se encuentra el directorio de Respaldos ingresado..."
        echo "Verifique nuevamente el nombre y vuelva a intentarlo..."
fi

read -n 1 -s -r -p "Presione [ENTER] para continuar..."

}

lista_de_BD(){

echo -e  "\Las Bases de Datos Actuales: "
sudo -u postgres psql -c "\l"
read -n 1 -s -r -p "Presione [ENTER] para continuar..."
}

while :
do
    #Limpiar la pantalla
    clear
    #Desplegar 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 respaldo                     "
    echo "4.Restaurar respaldo                    "
    echo "5.Listar Bases de Datos Actuales        "
    echo "6.Salir                                 " 

    #Leer los datos del Usuario - Capturar  Opcion
    read -n1 -p "Ingrese una opcion [1-5]: " opcion

    #Validar la opcion ingresada
    case $opcion in

        1) instalar_postgres

          #sleep 3
            ;;

        2) desinstalar_postgres

           #sleep 3
            ;;

        3)  echo -e "\n"
            read -p "Indique Directorio: " directorioBackup
            sacar_respaldo $directorioBackup


            ;;

        4)  echo -e "\n"
            #read -p "Indique Directorio de Respaldos " directorioRespaldos
            restaurar_respaldo $directorioRespaldos


            ;;

        5) lista_de_BD
            ;;

        6) echo -e "\nSaliendo del programa...."
            exit 0
            ;;
    esac
done

Lo que mas se agradece es que ya no volver茅 a escuchar 鈥淓L TEMA DE鈥 por un largo tiempo, curso terminado. Como punto adicional y cosa que sinceramente no se si ocurre en platzi, los videos deber铆an ser revisados con mas rigor ya que el profesor se equivoca algunas ocasiones, sumado a la muletilla que se hace estresante y por ultimo el no explicar bien los comandos, tuve que recurrir a buscar, leer comentarios mirar otros tutoriales para algo que le tomaba al profesor 20 segundos.

Creo que se podr铆a explicar mejor los comandos, pero parece que el tema no pasaba por ahi, sino que el tema era que el tema era otro tema

Basta de decir " EL TEMA DE "

Cuando la complejidad del script va en aumento, les recomiendo utilizar sus variables de la siguiente forma ${nombre_variable}, ya que as铆 sabemos visualmente cu谩l es el nombre de la variable.

Ejemplo:

cp $directorio_respaldo/bak_file.txt /home/bak/
cp ${directorio_respaldo}/bak_file.txt /home/bak/

Al menos, bajo mi punto de vista, es m谩s entendible a primera vista.

Me surge una duda: 驴Por qu茅 utilizar una variable para verificar si psql esta instalado? No ser铆a el mismo resultado que:

which psql | if  [ $? -eq 0 ] ; then ...
	# comando a ejecutar
fi 

Ac谩 he encontrado la diferencia entre usar backtick y $() para asignaci贸n de variables en los scripts

https://unix.stackexchange.com/questions/27428/what-does-backquote-backtick-mean-in-commands

Y al parecer no hay diferencia como tal, se llaman command substitution y adem谩s de permitirnos asignar valores a variables, tambi茅n nos permite hacer anidado de comandos

https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html

Felicidades si llegaste hasta aqu铆, has terminado el curso!

驴Cu谩l es la diferencia entre usar backtick en vez de $() para guardar valores en una variable?

Mi aporte

# !/bin/bash
# Programa que permite manejar las utilidades de Postgres

opcion=0
fechaActual=`date +%Y%m%d`

#Funci貌n para instalar Postgres
instalar_Postgres () {
  clear
  echo "Verificando instalaci贸n de Postgres..."
  verifyInstall=$(which psql)
  if [ $? -eq 0 ]; then
    echo -e "\nPostgres ya se encuentra instalado en el equipo"
  else
    #Cuando se piden datos con read y se quiere usal salto de linea se usa $ y comillas simples
    read -s -p $'\nIngresar contrase帽a de sudo: ' pwdSudo
    read -s -p $'\nIngresar contrase帽a a ultilizar en Postgres: ' pwdPsql
    #Ejecutar comandos
    echo "$pwdSudo" | sudo -S apt update
    echo "$pwdSudo" | sudo -S apt-get -y install postgresql postgresql-contrib
    #Cambio de clave del usuario en Postgres
    sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{$pwdPsql}';"
    #Habilitar e iniciar servicio Postgres
    echo "$pwdSudo" | sudo -S systemctl enable postgresql.service
    echo "$pwdSudo" | sudo -S systemctl star postgresql.service
  fi
  #Solicitar que presionen una tecla para continuar
  read -n1 -s -r -p $'\nPresione [ENTER] para continuar'
}

#Funci贸n para Desinstalar Postgres
desinstalar_Postgres () {
  clear
  echo "Iniciando proceso para Desinstalar Postgres..."
  read -s -p $'\nIngresar contrase帽a de sudo: ' pwdSudo
  echo -e "\n"
  echo "$pwdSudo" | sudo -S systemctl stop postgresql.service
  #Puede requerir este comando pero debe saber que versi贸n tiene instalado
  #echo "$pwdSudo" | sudo -S pg_dropcluster --stop 14 main
  echo "$pwdSudo" | sudo -S apt-get -y --purge remove postgresql\*
  echo "$pwdSudo" | sudo -S rm -r /etc/postgresql
  echo "$pwdSudo" | sudo -S rm -r /etc/postgresql-common
  echo "$pwdSudo" | sudo -S rm -r /var/lib/postgresql
  echo "$pwdSudo" | sudo -S userdel -r postgres
  echo "$pwdSudo" | sudo -S groupdel postgresql
  read -n1 -s -r -p $'\nPresione [ENTER] para continuar'
}

#Funci贸n para hacer Backups
sacar_Backup () {
  clear
  echo "Listar las BDD"
  sudo -u postgres psql -c "\l"
  read -p $'\nElegir la base de datos a respaldar: ' bddBackup
  echo -e "\n"
  if [ -d "$1" ]; then
    echo "Establecer permisos al directorio"
    echo "$pwdSudo" | sudo -S chmod 755 $1
    echo -e "\nRealizando Backup..."
    sudo -u postgres pg_dump -Fc $bddBackup > "$1/bddBackup$fechaActual.bak"
    echo -e "\nBackup realizado Correctamente!"
  else
    echo "El directorio $1 no existe..."
    echo -e "\n"
    read -n1 -p "Desea crear el directorio $1? (s/n)" respuestaDir
    if [ respuestaDir = "s" ]; then
      sudo mkdir $1
      echo "$pwdSudo" | sudo -S chmod 755 $1
      echo -e "\nRealizando Backup..."
      sudo -u postgres pg_dump -Fc $bddBackup > "$1/bddBackup$fechaActual.bak"
      echo -e "\nBackup realizado Correctamente!"
    else
      echo -e "\nSaliendo sin realizar Backup..."
    fi
  fi
  read -n1 -s -r -p $'\nPresione [ENTER] para continuar'
}

#Funci贸n para Restaurar Backups
restaurar_Backup () {
  echo "Listar Backups"
  ls -1 $1/*.bak
  read -p "Elegir el Backup a Restaurar: " backupRestore
  read -p $'\nIngrese el nombre de la BDD destino: ' bddDestino
  #Verificar si la BDD existe!
  verifyBdd=$(sudo -u postgres psql -lqt | cut -d \| -f 1 | grep -wq $bddDestino)
  if [ $? -eq 0 ]; then
    echo "Restaurando en la BDD destino: $bddDestino"
  else
    sudo -u postgres psql -c "create database $bddDestino"
  fi
  #Verificar si el respaldo que se va restaurar existe
  if [ -f "$1/$backupRestore" ]; then
    echo "Restaurando Backup..."
    sudo -u postgres pg_restore -Fc -d $bddDestino "$1/$backupRestore"
    echo -e "\nListar la BDD"
    sudo -u postgres psql -c "\l"
  else
    echo -e "\nEl Backup $backupRestore no existe!"
  fi
  read -n1 -s -r -p $'\nPresione [ENTER] para continuar'
}

while :
do
  #Limpiar la pantalla
  clear
  #Desplegar el men煤 de opciones
  echo "_________________________________________"
  echo "PGUTIL - Programa de Utilidad de Postgres"
  echo "_________________________________________"
  echo "              MEN脷 PRINCIPAL             "
  echo "_________________________________________"
  echo "1. Instalar Postgres"
  echo "2. Desinstalar Postgres"
  echo "3. Hacer un Backup"
  echo "4. Restaurar un Backup"
  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
      ;;
    2) 
      desinstalar_Postgres
      ;;
    3)
      clear
      read -p "Indique el Directorio de Backups: " directorioBackup
      sacar_Backup $directorioBackup
      ;;
    4)
      clear
      read -p "Ingrese el Directorio donde se encuentran los Backups: " directorioRestaurar
      restaurar_Backup $directorioRestaurar
      ;;
    5)
      echo -e "\n\nSalir del Programa..."
      exit 0
      ;;
  esac
done
#!/bin/bash
# Este script muestra uso de funciones
# Autor: Julian Lamadrid, jlamadrid, litocruz

# Variables
opcion=0
fechaActual=`date +%Y%m%d`

# funciones
instalar_postgres () {
  echo "Verificar Instalacion postgres.."
  verifypostgres=$(wich psql)
#  if [ which psql 1>2 2>/dev/null ]; then
  if [ $? -eq 0 ]; then
    echo -e "Psgress ya se encuentra instalado"
  else
    read -s -p "Ingresar contrase帽a ROOT: "password
    read -s -p "Ingresar contrase帽a postgres: "passwordpostgres
    echo "$password" | sudo -S apt update
    echo "$password" | sudo -S apt install postgresql postgresql-contrib
    sudo -u postgres psql -C "ALTER USER postgres WITH PASSWORD '{$passwordpostgres}';"
    echo "$password" | sudo -S systemctl enable postgresql.service
    echo "$password" | sudo -S systemctl start postgresql.service
  fi
  read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..."

}
desinstalar_postgres () {
  echo "Desinstalando postgres.."
  read -s -p "Ingresar contrase帽a ROOT: "password
  echo "$password" | sudo -S systemctl stop postgresql.service
  echo "$password" | sudo -S apt -y remove --purge postgresql\*
  echo "$password" | sudo -S rm -r /etc/postgresql
  echo "$password" | sudo -S rm -r /etc/postgresql-common
  echo "$password" | sudo -S rm -r /var/lib/postgresql
  echo "$password" | sudo -S userdel -r postgres
  echo "$password" | sudo -S groupdel postgresql
  read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..."
}
sacar_respaldo () {
  echo "Listar bases de datos postgres"
  sudo -u postgres psql -c "\l"
  read -p "Elegir la base de datos a respaldar" DBdump
  echo -e "\n"
  if [ -d "$1" ]; then
    echo "Establecer permisos de directorio"
    read -p -s "Ingresar contrase帽a ROOT: "password
    echo "$password" | sudo -S chmod 755 $1
    echo "sacando respaldo.."
    sudo -u postgres pg_dump -Fc $DBdump > "$1/$DBdump$fechaActual.bak"
    echo "Respaldo realizado en $1/$DBdump$fechaActual.bak"
  else
    read -p -n 1 "El directorio $1 no existe, desea crearlo s/n?" crerdirectorio
    if [ $crerdirectorio = "s" ]; then
      mkdir $1
      [ $? -eq 0 ] && echo "Directorio creado con exito. Vuelva a ingresar para realizar respaldo" || echo "error %?"
    fi
  fi
  read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..."

}
restaurar_respaldo () {
  echo "Listar respaldos"
  ls -la $1
  read -p "Elegir el respaldo a restaurar: " respaldoRestaurar
  echo -e "\n"
  echo "Listar bases de datos postgres"
  sudo -u postgres psql -c "\l"
  read -p "Elegir la base de datos a respaldar" DBdump
  echo -e "\n"
  echo "restaurando respaldo.."
  sudo -u postgres pg_restore -Fc -d $DBdump "$1/$respaldoRpestaurar"
  read -n 1 -s -r -p "PRESIONE [ENTER] para continuar..."
}

while :
do
  #Limpiar pantalla
  clear
  #Desplegar menu opciones
  echo "-----------------------------------------"
  echo "PGUTIL - Programa de utilidad de Postgres"
  echo "-----------------------------------------"
  echo "             MENU PRINCIPAL              "
  echo "1. Instalar Postgres"
  echo "2. Desinstalar Postgres"
  echo "3. Sacar un Respaldo"
  echo "4. Restaurar un Respaldo"
  echo "5. Exit"

  # Leer los datos del usuario - capturar info
  read -n1 -p "Ingrese opcion del [1-5]: " opcion
  echo -e "\n"
  #Validar opcion ingresada
  case $opcion in
    1)
      instalar_postgres
      ;;
    2)
      desinstalar_postgres
      ;;
    3)
      read -p "Directorio Backup: " directoriobackup
      sacar_respaldo $directoriobackup
      ;;
    4)
      read -p "Directorio Respaldo: " directoriorespaldo
      restaurar_respaldo $directoriorespaldo
      ;;
    5)
      echo -e "\nSaliendo..."
      exit 0
      ;;
  esac
done

Muy potente