2011-08-31 10 views
8

Estoy escribiendo un script bash para realizar algunas operaciones contra una base de datos en mi Debian squeeze Server.bash check mysql connect

He notado que si ingreso una contraseña incorrecta para el directorio raíz, el aviso se cerrará y no se me pedirá que intente nuevamente ... ¡eso no es muy conveniente!

Así que estaba tratando de crear un bucle que intente conectarse a MYSQL y guardar la contraseña para más adelante si tiene éxito.

Intenté esto, pero no funciona. En cambio, recibo este error:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

read -s -p "Enter MYSQL root password: " mysqlRootPassword 

while [[ -n `mysql -u root -p$mysqlRootPassword` ]]; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

yo no soy muy experimentado en secuencias de comandos bash, cualquier ayuda sería increíble!

+0

¿cuánto es $ MYSQL? –

+0

Puede que tenga mejor suerte en serverfault.com, aunque esto se considera una pregunta de programación ... – Ben

+0

no hace exactamente lo que hace referencia (lo encontró en la web), ¡pero está funcionando bien! Reconozco que esto es confuso, voy a editar mi pregunta y reemplazarla por 'mysql'. ¡Gracias! – Erwan

Respuesta

14

No creo que necesite la prueba [[ -n backtic ... ]]; anidada así. Proveedores:

read -s -p "Enter MYSQL root password: " mysqlRootPassword 

while ! mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

while evalúa cualquier grupo de comandos hasta el cierre ; do y comprueba el código de retorno del último comando ejecutado para determinar si el bucle debe ser ejecutado. Debido a que usted está buscando un fracaso, usted tiene que preceder a la prueba con un NO lógico (!) o puede utilizar el equivalente sintáctico, es decir

until mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

que se puede considerar como 'hasta MySQL funciona correctamente, mantenga tratando de obtener la contraseña correcta '.

Lamentablemente, no tengo acceso a una instalación de MySQL, por lo que no se ha probado.

Espero que esto ayude.

+1

Gracias amigo, eso fue todo! Sin embargo, esto se conectará a mysql y mostrará su mensaje. Para evitar eso, esta es la declaración de while: while! mysql -uroot -p $ mysqlRootPassword -e ";" ; do – Erwan

+0

@Erwan, me alegro de que ayudó. He editado mi respuesta para incluir su mejora. ¿Lo entendí bien? Gracias y buena suerte. – shellter

+1

yop, ¡es perfecto! Muchas gracias, hombre – Erwan