シェルスクリプト - 1つのif文で複数の同等性をテストする

シェルスクリプト - 1つのif文で複数の同等性をテストする

だから私はスクリプトを作成し、最後に飲み物を入力したときに実行しない行が実行されることを除いてうまくいきました。最後の行は、「いいえ」または「いいえ」を入力した場合にのみ表示されます。私が何を間違っているのでしょうか?

echo -n "Are you thirsty?"
read th

if [ "$th" = "yes" ] || [ "Yes" ]; then
    echo "What would you like to drink?"
    read th
fi

if [ "$th" = "water" ]; then
    echo "Clear crisp and refreshing."
elif [ "$th" = "beer" ]; then
    echo "Let me see some ID."
elif [ "$th" = "wine" ]; then
    echo "One box or Two?"
else
    echo "Coming right up."
fi

if [ "$th" = "no" ] || [ "No" ]; then
    echo "Come back when you are thirsty."
fi

ベストアンサー1

あなたの質問は[ "Yes" ]それ[ "No" ]と同じであり、[ -n "Yes" ]したがって[ -n "No" ]常にtrueと評価されます。

正しい構文は次のとおりです。

if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; then
...
if [ "$th" = "no" ] || [ "$th" = "No" ]; then

または:

if [ "$th" = "yes" -o "$th" = "Yes" ]; then
...
if [ "$th" = "no" -o "$th" = "No" ]; then

またはbashBourne シェルインタプリタを使用する場合:

if [ "${th,,}" = "yes" ]; then
...
if [ "${th,,}" = "no" ]; then

${th,,}変数の小文字の値に置き換えますth

おすすめ記事