Bashの条件が異なる場合

Bashの条件が異なる場合

if else3つのブール変数を使用するbashスクリプトを作成しようとしています。

  1. CHECK_X
  2. CHECK_Y
  3. CHECK_Z

もしそうでなければCHECK_XCHECK_Y間違ったそしてまたCHECK_Z間違った次に、条件が満たされていないことをユーザーに通知します。だから、次のようにしました。

if [[ "$CHECKX" || "$CHECKY" == "FALSE" ]] && [[ "$CHECKZ" == "FALSE" ]]; then
  echo "Condition not met"
fi

上記のコードを使用して、CHECK_XまたはCHECK_Y正しい場合CHECK_Zでも間違ったこのようなことが続くなら、私が望むのはこれではありません。

私はこれらのうちの1つが必要CHECK_Xです。CHECK_Z本物それとも​CHECK_YCHECK_Z本物私の条件が満たされるまで。

次のコードを使用しても機能しません。

if [[ "$CHECK_X" && "$CHECK_Z" == "FALSE" ]] || [[ "$CHECK_Y" && "$DCHECK_Z" == "FALSE" ]]; then
  echo "Condition not met"
fi    

どこか複雑すぎると思うし、専門家のアドバイスが必要です。ありがとう

修正する:

最近のフィードバックに基づいて、コードを次のように更新しました。

if [[ "$CHECK_X" == "FALSE" || "$CHECK_Y" == "FALSE" ]] && [[ "$CHECK_Z" == "FALSE" ]]; then
  echo "Condition not met"
fi

しかし、テスト後、私は次のようなものを得ました...

場合:

  1. CHECK_X="TRUE"
  2. CHECK_Y="FALSE"
  3. CHECK_Z="TRUE"

出力: Condition not met。これは間違った条件のため1そしてサムはいTRUE

場合:

  1. CHECK_X="TRUE"
  2. CHECK_Y="FALSE"
  3. CHECK_Z="FALSE"

出力: Condition not met。これは正しい条件のため1そしてサムみんないいえ TRUE

場合:

  1. CHECK_X="FALSE"
  2. CHECK_Y="TRUE"
  3. CHECK_Z="FALSE"

出力:スクリプトが完了しました。これは間違った条件のため2そしてサムはいいいえ TRUE

場合:

  1. CHECK_X="FALSE"
  2. CHECK_Y="TRUE"
  3. CHECK_Z="TRUE"

出力:スクリプトが完了しました。これは正しい条件のため2そしてサムはいTRUE

場合:

  1. CHECK_X="FALSE"
  2. CHECK_Y="FALSE"
  3. CHECK_Z="FALSE"

出力: Condition not met。これは正しい条件のため1そしてサムまたは2そしてサムはいいいえ TRUE

ベストアンサー1

各変数を確認する必要があります。

if [[ "$CHECKX" == "FALSE" || "$CHECKY" == "FALSE" ]] && [[ "$CHECKZ" == "FALSE" ]]; then
  echo "Condition not met"
fi

時々、これは設定されていることをif [[ "$CHECKX" || "$CHECKY" == "FALSE" ]]確認し、文字列と比較します。表示するには:$CHECKX$CHECKYFALSE

$ CHECKX=foo
$ CHECKY=TRUE
$ [[ "$CHECKX" || "$CHECKY" == "FALSE" ]] && echo true
true
$ CHECKX=""
$ [[ "$CHECKX" || "$CHECKY" == "FALSE" ]] && echo true
$ 

上記のように、空の文字列に設定されている場合にのみ検査が失敗するため、CHECKXテストは[[ "$CHECKX" ]]falseと評価されます。以下を含む任意の値に設定されている場合0

$ CHECKX=0
$ [[ "$CHECKX" || "$CHECKY" == "FALSE" ]] && echo true
true

おすすめ記事