Bash não expande variáveis entre aspas simples. Além disso, você pode executar várias consultas SQL ou uma única, se preferir, usando a construção <<EOF...EOF
. O código abaixo funcionou para mim
#!/bin/bash
newpass="newPassword"
mysql -u root -poldPassword <<EOF
UPDATE mysql.user SET Password=PASSWORD("$newpass") WHERE User='root';
FLUSH PRIVILEGES;
QUIT
EOF
Você pode executar o comando UPDATE
corretamente de acordo com sua versão do MySQL. Eu estava usando 5.6.35 . Caso você esteja executando apenas o MySQL 5.7 , use a seguinte consulta UPDATE
em vez da mostrada acima:
UPDATE mysql.user SET authentication_string=PASSWORD("$newpass") WHERE User='root';
Você pode encontrar mais informações nos documentos oficiais do MySQL: link
Espero que tenha ajudado