
Ich versuche, ein Bash-Skript zum Ändern des MySQL-Root-Passworts zu erstellen. Unten sehen Sie den aktuellen Codeausschnitt, mit dem ich arbeite:
#!/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"'
Die obige Syntax zum Ändern des Root-Passworts ist möglicherweise nicht richtig, aber der Teil, bei dem ich nicht weiterkomme, ist das Generieren eines einzeiligen Befehls zum Arbeiten mit MySQL. Wenn der Befehl länger als zwei Zeilen ist, wird die MySQL-Eingabeaufforderung aufgerufen und die MySQL-Befehle im Bash-Skript werden ausgeführt, nachdem die MySQL-Eingabeaufforderung mit dem Befehl „exit“ geschlossen wurde.
Meine Absicht besteht darin, die relevanten Kennwortinformationen über das Bash-Skript zu erfassen, einen einzelnen Befehl zum Ändern des Root-Kennworts auszuführen und dann zum Bash-Skript bzw. zur Bash-Eingabeaufforderung zurückzukehren, wenn das Skript beendet wurde.
Antwort1
Wenn Sie wissen möchten, wie Sie mit einem einzigen Befehl mehrere Anweisungen ausführen mysql
, können Sie diese einfach durch Semikolons trennen:
$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
oder Sie können eine Datei mit den SQL-Anweisungen erstellen und diese ausführen:
$ mysql < change_password.sql
Antwort2
Verwenden Sie mysqladmin, anstatt eine Abfrage in MySQL auszuführen.
mysqladmin -u root -p'$oldrootpass' password '$newrootpass'
sollte funktionieren, aber Sie müssen möglicherweise ein wenig mit den Anführungszeichen herumspielen.