1

さて、私はある種のユーザー名/パスワード ログイン スクリプトを作成しようとしています。(私がまだ取り組んでいる最も安全なアイデアではないかもしれません);)

私のスクリプトは、このようなファイルから比較する変数をロードします。(今はパスワード部分に取り組んでいます)

./path/to/variables.conf

このファイルには、と呼ばれる変数が含まれます

PASS=SOME_VALUE 

read を使用して、比較される変数を取得する予定です

read -p "Enter your password:" CPASS; 

今、私が欠けている部分 (どのように機能すると思いますか)

while "$CPASS" doesn't match "$PASS" do 
read -p "Wrong password, try again:" CPASS;

ありがとう、どんな助けでも大歓迎です。

4

1 に答える 1

2

これでうまくいくはずです。bash で文字列を比較する[ ]には、中かっこと!=演算子だけが必要です。

PASS=SOME_VALUE

read -p "Enter your password:" CPASS

while [ "$CPASS" != "$PASS" ]; do 
    read -p "Wrong password, try again:" CPASS
done

-sまた、入力したパスワードがユーザーにエコーバックされないように、パラメータを read に渡すことを強くお勧めします。のreadセクションからman bash

          -s     Silent  mode.  If input is coming from a terminal, char-
                 acters are not echoed.

ただし、ユーザーが ENTER を押したときに改行がエコーバックされないことに注意してくださいread。そのため、行が適切にフォーマットされるように、毎回手動で改行を挿入する必要があります。したがって、おそらく read ステートメントを次のようなものに置き換える必要があります。

read -s -p "Enter your password:" CPASS
echo
于 2013-10-23T23:08:17.163 に答える