
Estou tentando criar um script bash para alterar a senha root do MySQL. Abaixo está o trecho de código atual com o qual estou trabalhando:
#!/bin/sh
clear
echo "Enter the current password for the root mysql account."
read oldrootpass
echo "Enter a new password for the root mysql account."
read newrootpass
mysql -u root -p$oldrootpass -Bse 'UPDATE user SET password=PASSWORD("$newrootpass") WHERE User="root"'
A sintaxe acima para alterar a senha do root pode não estar correta, mas a parte em que estou preso é gerar um comando de uma linha para trabalhar com o mysql. Se o comando ultrapassar 2 linhas, o prompt do MySQL será inserido e os comandos do MySQL no bash são executados quando o prompt do MySQL é fechado com o comando 'exit'.
Minha intenção é coletar as informações de senha relevantes por meio do script bash, executar um único comando para alterar a senha root e depois retornar ao script bash ou ao prompt do bash se o script for finalizado.
Responder1
Se você está perguntando como executar mais de uma instrução com um único mysql
comando, você pode simplesmente separá-las por ponto e vírgula:
$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
ou você pode criar um arquivo contendo as instruções SQL e executá-lo:
$ mysql < change_password.sql
Responder2
Use mysqladmin em vez de executar uma consulta no mysql.
mysqladmin -u root -p'$oldrootpass' password '$newrootpass'
deve funcionar, mas talvez você precise mexer um pouco nas aspas.