2011-08-31 10 views
8

私は、debian squeeze Serverのデータベースに対していくつかの操作を実行するためのbashスクリプトを書いています。bash check mysql connect

rootに間違ったパスワードを入力すると、プロンプトが閉じられ、もう一度やり直すように求められないことに気付きました。これはあまり便利ではありません。

私はMYSQLに接続し、成功するとパスワードを保存しようとするループを作成しようとしていました。

私はこれを試しましたが、動作しません。 は代わりに、私はこのエラーが表示されます。

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 

私は任意のヘルプは素晴らしいだろう、bashのスクリプトでは非常に経験豊富ではありませんよ!

+0

$ MYSQLとは何ですか? –

+0

これはプログラミングの質問と考えられていますが、serverfault.comでもっとうまくいくかもしれません。 – Ben

+0

正確には何を参照しているのですか(ウェブ上で見つけました)。私はこれが混乱していることを認め、私は質問を編集し、それを 'mysql'で置き換えます。ありがとう! – Erwan

答えて

14

[[ -n backtic ... ]];のようなネストされたテストは必要ありません。試す:

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は閉鎖; do件まで任意のコマンド群を評価し、ループを実行すべきかどうかを決定するために最後に実行されたコマンドの戻りコードをチェックします。あなたが失敗を探しているので、あなたは論理NOT(!)でテストの前に持っているか、あなたは、MySQLが正しく動作するまで

あなたに考えることができ
until mysql -u root -p$mysqlRootPassword -e ";" ; do 
     read -p "Can't connect, please retry: " mysqlRootPassword 
done 

」、キープすなわち、構文同等のものを使用することができます適切なパスワードを取得しようとしています。

残念ながら、私はmysqlインストールにアクセスできないので、これはテストされていません。

こちらがお役に立てば幸いです。

+1

ありがとう、それだった!しかし、これはmysqlに接続し、そのプロンプトを表示します。それを避けるために、while文があります:while! mysql -root -p $ mysqlRootPassword -e ";" ; – Erwan

+0

@エラン、喜んで助けた。私はあなたの改善を含めるために私の答えを編集しました。私はそれを正しく得たか?ありがとう、幸運。 – shellter

+1

yop、それは完璧です!おかげでたくさんの男 – Erwan