web-dev-qa-db-ja.com

ユーザー入力が何かと等しくなるまで

そこで、誰かが条件を使用して、ユーザーがパスワードの入力を入力したかどうかをテストする方法を教えてくれました。私は彼らの例をさらに一歩進めて、ループを使用したいと思います(少なくともそれは私がそれが呼んでいると思うものです)。

これが彼らの例です:

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 ""

次の部分では、変数に値が含まれているかどうかを確認しますが、値がnullの場合は、ユーザーに値を無期限に入力するように要求します。 (ループ)

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   

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

11
Geofferey

このwhileループは機能するはずです:

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