の正しい構文[
は次のとおりです。
[ a = b ]
あなたのエラーメッセージから、あなたが書いたように聞こえます:
if ["$password" = "$valid_password" ]
これを次のように変更します。
if [ "$password" = "$valid_password" ]
の後のスペースに注意して[
ください。シェルコマンドを取り、それを実行しようとすると、プログラムからの終了コードがステートメント内でコマンドを実行するif
かどうかに応じて実行されます。0
if
端末で、次のように記述します。
user@localhost$ true; echo $?
0
if ステートメントをテストするには:
user@localhost$ pass=pass; valid=pass
user@localhost$ if [ "$pass" = "$valid" ]; then echo 'You have access!'; fi
@nullrevolution が言ったように、!
二重引用符を使用すると が評価され、シェル履歴の最後のコマンドを実行しようとします。この場合、一致するu
.
user@localhost$ uname
Linux
user@localhost$ !u
uname
Linux
user@localhost$ echo "!"
sh: !: event not found
これは!
、二重引用符が一致する前に が評価され、echo が実行されるためです。それでも二重引用符を使用したい場合は!
、引用符の外側をエスケープする必要があります:
echo "Access denied"\!
bash
@nullrevolution はまた、 if ステートメント内の式の組み込み構文を持つ で試すことができると述べました。
#!/bin/bash
valid_password=pass
echo "Please enter the password:"
read password
if [[ "$password" == "$valid_password" ]]; then
echo 'You have access!'
else
echo 'Access denied!'
fi
また、あなたのプログラムでは、一時的な変更のエコーをオフにするために、ターミナルでパスワードをエコーしたくないと思います。
read password
に
stty -echo
read password
stty echo
stty echo
エコーを再度オンにするために書き込むのを忘れた場合reset
は、端末に書き込むだけで、端末がデフォルト設定にリセットされます。
bourn シェル スクリプトの便利なチュートリアルは次の場所にあります。
http://www.grymoire.com/Unix/Sh.html