2012-05-09 10 views
3

私はMySQLでいくつかのアクションを実行する必要があるbashスクリプトを持っています。それは空白のパスワードを持つMySQLユーザ名と一緒に使用されるまでbashスクリプトのMySQLパスワード入力

#!/bin/sh 
read -p "Enter your MySQL username: " $sqluname 
read -sp "Enter your MySQL password (ENTER for none): " $sqlpasswd 
/usr/bin/mysql -u $sqluname -p $sqlpasswd << eof 
*some SQL stuff* 
eof 

これはうまく機能:これまでのところ私はこのようなものを持っています。ユーザーはパスワードプロンプトでEnterキーを押しますが、もう一度MySQLから「パスワードを入力してください」という別のプロンプトが表示されます。

この2番目のパスワードプロンプトを回避して、スクリプトで空白と空白の両方のパスワードを処理するにはどうすればよいですか?

+1

それは動作しますか? – sarnold

+0

いいえ.................... – Shaun

答えて

2

パスワードが空白かどうかを確認し、パスワードが空白であるかどうかを確認し、パスワードがある場合は、-pスイッチをすべて省略してください。

read -p "Enter your MySQL username: " $sqluname 
read -sp "Enter your MySQL password (ENTER for none): " $sqlpasswd 
if [ -n "$sqlpasswd" ]; then 
    /usr/bin/mysql -u $sqluname -p $sqlpasswd << eof 
else 
    /usr/bin/mysql -u $sqluname << eof 
fi 

全体のif-then-elseブロックを避けるために、後で編集:あなたは ` "$のsqlpassword"`と `$のsqlpassword`を交換する場合

command="/usr/bin/mysql -u $sqluname" 
[ -n "$sqlpasswd" ] && command="$command -p$sqlpasswd" 
eval $command 
+0

それは動作します。私はちょっと、if/then/elseブロックよりもきれいな方法があることを望んでいましたが、これはとにかくうまくいきます。 – Shaun

+0

これは、ブロック全体の代わりにこれを試すことができます。 [-n "$ sqlpasswd"] && command = "$ command -p $ sqlpasswd" – Ansari

+0

最初の変種は+1です。 2番目のバージョンは、それが価値があるよりも多くのトラブルがあるように感じます。 – sarnold

2

-nスイッチは、$ sqlpasswdが空の場合(​​ではなく)、指定する必要があります。

関連する問題