
私のbashスクリプトの次の行は、複数のOR演算子を評価しません。最初の項目を確認して続行してください。
if [[ "${SERVER_NAME}" != $BITBUCKET || $CONFLUENCE || $CROWD || $JIRA || $JENKINS ]]; then
other code here...
fi
bash -x
スクリプトから私はこれを得ました。
+ [[ crowd.server.com != code.server.com ]]
以下は$BITBUCKET
変数です。続行する前に、すべての変数を評価するために$SERVER_NAME
必要です。crowd.server.com
答え1
これは予想されます。演算子の1項 ||
がと評価されると、シーケンスtrue
全体の値はになりますtrue
。
演算子を使用して&&
、比較したい文字列に基づいて文字列比較演算子を複数回使用してみてください。
より良い方法は、case
次の文を使用することです。
case "${SERVER_NAME}" in
"$BITBUCKET" | "$CONFLUENCE" | "$CROWD" | "$JIRA" | "$JENKINS") ;; # do nothing for these servers
*)
# your original code here...
;;
esac
答え2
複数の文字列で文字列を確認したいと思います。これを行う:
if [[ ! "$SERVER_NAME" =~ ^($BITBUCKET|$CONFLUENCE|$CROWD|$JIRA|$JENKINS)$ ]]; then ...
答え3
次または文では何も比較できません。考えてみてください:
#!/bin/bash
if [[ $1 == "foo" || $1 == "bar" ]]; then
echo "foo or bar"
else
echo "not foo or bar"
fi
実行後、次のようになります。
./orTest.sh bar
foo or bar
./orTest.sh foo
foo or bar
./orTest.sh foobar
not foo or bar
つまり、@Dmitry Grigoryevは次のように書きました。
比較される文字列と同じ文字列比較演算子を使用します。
これは間違った:
#!/bin/bash
if [[ $1 == "foo" || "bar" ]]; then
echo "foo or bar"
else
echo "not foo or bar"
fi
例:
/orTestFail.sh bar
foo or bar
./orTestFail.sh foo
foo or bar
./orTestFail.sh foobar
foo or bar