2013-10-22 11 views
10

誰かが、ユーザーがパスワードの入力を入力したかどうかをテストするために条件を使用する方法を教えてくれました。 私は一歩一歩前進し、ループを使用したいと思っています。ここでユーザー入力が何かに等しくなるまで

はその例です。

read -s -p "Enter new password: " NEWPASS 

if test "$NEWPASS" = ""; then 
    echo "Password CAN NOT be blank re-run sshd_config" 
    exit 1; 
fi 

の代わりに、私はそれはいくつかがあるまでの入力を求めておきたいスクリプトを終了します。

私はこのような文を作るたいが、私は間違ったことをしていた:ユーザーが新しいパスワードを入力し、変数の値を記入する機会が与えられている

(今トップの例を使用して)。

read -s -p "Enter new password:" NEWPASS 
echo "" 

値は、それが無限に値を埋めるようにユーザに要求ヌルである次の部分は、それが値を含んでいるかどうかを確認するために変数をチェックします。 (ループ)

while [[ -z "$NEWPASS" ]]; do 
echo "" 
echo "Password CAN NOT be blank" 
echo "" 
read -s -p "Enter new password:" NEWPASS; 
echo "" 
done 

この行は、別のファイルで使用される変数のセットを含むファイルを検索します。それは、その後= PASSを含む行のためのファイルを検索します。*(。*何を意味する)、その後PASS = $ NEWPASS($ NEWPASSている変数)が書き込み

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf 

はすべての助けをありがとう、私はするつもりですこれを使ってそれから学ぶ。

答えて

19

このwhileループは動作するはずです:

while [[ -z "$NEWPASS" ]] 
do 
    read -s -p "Enter new password: " NEWPASS 
done 
+1

、あなたの答えを打破し、説明してもらえますか?私はかなりジストを手に入れます。私はそれを完全に理解したいだけです。 – Geofferey

+3

はい。 '-z string'はstringが空であることを意味し、while [[-z" $ NEWPASS "]]'は '$ NEWPASS'が空になるまでループ中にこれを実行することを意味します。あなたの通常の読み込みコマンドはwhileループの中に入ります。ユーザがEnterを押すと、 '$ NEWPASS'はまだ空白になりプロンプトが再び表示されます。 '$ NEWPASS'は空ではないので、モーメントユーザはループを終了している間に値を入力します。詳細については 'man test'を実行してください。 – anubhava

3
while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do 
echo "No-no, please, no blank passwords!" 
done 
+0

あなたはあなたの答えを分解して説明できますか? – Geofferey

+0

確かに 'read'が成功すれば、testは評価されます。もし文字列が空ならばループが続き、そうでなければ - ループが終了します。 –

関連する問題