
私は MySQL のルート パスワードを変更する bash スクリプトを作成しようとしています。以下は現在使用しているコード スニペットです。
#!/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"'
ルート パスワードを変更するための上記の構文は正しくない可能性がありますが、私が行き詰まっている部分は、mysql を操作するための 1 行のコマンドを生成する部分です。コマンドが 2 行を超えると、MySQL プロンプトが入力され、MySQL プロンプトが 'exit' コマンドで閉じられた後に、bash スクリプト内の MySQL コマンドが実行されます。
私の意図は、bash スクリプトを介して関連するパスワード情報を収集し、ルート パスワードを変更する単一のコマンドを実行してから、bash スクリプトに戻るか、スクリプトが終了したら bash プロンプトに戻ることです。
答え1
1 つのコマンドで複数のステートメントを実行する方法を尋ねている場合はmysql
、単にセミコロンで区切ることもできます。
$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
または、SQL ステートメントを含むファイルを作成して実行することもできます。
$ mysql < change_password.sql
答え2
mysql でクエリを実行する代わりに、mysqladmin を使用します。
mysqladmin -u root -p'$oldrootpass' password '$newrootpass'
動作するはずですが、引用符を少しいじる必要があるかもしれません。