Bash Script que respalda la base de datos MySQL

Escribí un script y sigo recibiendo los siguientes errores. acceso denegado para el usuario 'zul'@'localhost (con contraseña: sí) al intentar conectarse

proyecto: 43: [d: no encontrado

proyecto: 43: [d: no encontrado

No está leyendo la entrada d ni se está conectando a MySQL. ¿Algunas ideas?

Aquí está mi guión:

#!/bin/bash

tstamp=$(date +$s) 

#Dump or Update
if [ -z "$1" ]; then
  echo -n "What do you want to do? [D]ump or [U]pdate: "
  read parm
else
  parm=$1
fi

#Database Name
if [ -z "$2" ]; then
  echo -n "What database are you using?"
  read dbname
else
  dbname=$2
fi

#Database User
if [ -z "$3" ]; then
  echo -n "What database user are you using?"
  read dbuser
else
  dbuser=$3
fi

#Database Password
if [ -z "$4" ]; then
     echo -n "What password are you using?"
     read dbpass
else
     dbpass=$4
fi


#Checks if the directory exists
if test ! -d "/home/zul/sql/backup"; then
  mkdir /home/zul/sql
  mkdir /home/zul/sql/backup
fi

mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$tstamp.$dbname.sql

if [$parm = d ]; then
  mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [$parm = u ]; then
  mysqldump $dbuser -p$dbpass $dbname < /home/zul/sql/backup/$dbname.sql
else
  echo " d or u option only! (lower case)"
fi

preguntado el 28 de julio de 12 a las 17:07

¿No es esto esencialmente construir una línea de comando para llamar a mysqldump? Cuestionaría la utilidad de tal script. Suena, al menos para mí, como una cosa más para mantener sin mucho beneficio. -

¿Intentaste correr con bash -vx tu guion? Esto ayuda mucho y le permitiría encontrar su error:

2 Respuestas

Supongo que falta un espacio en tu prueba if-else:
Debieran ser [ test ] y no [test ]

if [ $parm = d ]; then
  mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [ $parm = u ]; then
  mysqldump $dbuser -p$dbpass $dbname < /home/zul/sql/backup/$dbname.sql
else

Respondido 28 Jul 12, 17:07

y la razón de esto es que se analiza como [test ser un comando ([d: not found - es decir, no hay ningún comando llamado [d) - karoly horvath

Gracias, eso funcionó. ¿Alguna idea de por qué me niegan el acceso al usuario 'zul'@'localhost? Ingresé la contraseña correcta pero todavía me da ese error. - KD

zul no puede conectarse desde localhost. - karoly horvath

@KD: no hay código que establezca $dbpass en el guión que publicaste - comida

@KD: eso no parece un problema con su secuencia de comandos. - comida

Debe separar '[' de sus argumentos con espacios en blanco:

if [ $parm = d ]; then
    mysqldump $dbuser -p$dbpass $dbname > /home/zul/sql/backup/$dbname.sql
elif [ $parm = u ]; then

Respondido 28 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.