bashスクリプト:複数のOR条件が期待どおりに機能しない場合

bashスクリプト:複数のOR条件が期待どおりに機能しない場合

以下のスクリプトでは、「abc」ユーザーとして実行した場合、スクリプトは「exit 1」を実行しないでください。それでも「exit 1」を実行してください。

if [ "$(whoami)" != "abc" ] || [ "$(whoami)" != "xyz" ] || [ "$(whoami)" != "pqr" ]
then
    exit 1
else
    echo "Run remaining script"
fi

ベストアンサー1

bashスクリプトが私にとってうまくいくようです。実行中です。abcこれは最初のテストがfalse(abc等しいabc)であることを意味するため、評価はtrue(abc等しくないxyz)の次のテストに続き、スクリプトは取得されるとfalse || true || true終了しますtrue

ユーザーが、、のいずれかである場合は、「残りのスクリプトを実行」するには、abcORを使用し、AND条件を逆にするか、同じにしてANDを使用する必要があります。xyzpqr==ifelse

したがって、次のいずれかを実行してください。

if [ "$(whoami)" != "abc" ] && [ "$(whoami)" != "xyz" ] && [ "$(whoami)" != "pqr" ]
then
    exit 1
else
    echo "Run remaining script"
fi

または:

if [ "$(whoami)" == "abc" ] || [ "$(whoami)" == "xyz" ] || [ "$(whoami)" == "pqr" ]
then
    echo "Run remaining script"
else
    exit 1
fi

おすすめ記事