Eu acho que você quer verificar uma string em mais strings. Faça isso:
if [[ ! "$SERVER_NAME" =~ ^($BITBUCKET|$CONFLUENCE|$CROWD|$JIRA|$JENKINS)$ ]]; then ...
A linha no meu script bash da seguinte forma não está conseguindo avaliar vários operadores OR. É verificar o primeiro e depois seguir em frente
if [[ "${SERVER_NAME}" != $BITBUCKET || $CONFLUENCE || $CROWD || $JIRA || $JENKINS ]]; then
other code here...
fi
com bash -x
no script eu recebo isso;
+ [[ crowd.server.com != code.server.com ]]
Esta é a variável $BITBUCKET
e $SERVER_NAME
é crowd.server.com
Preciso avaliar todas as variáveis antes de seguir em frente
Isso é esperado. Quando um dos termos do operador ||
for avaliado como true
, o valor da sequência inteira se tornará true
.
Tente usar o operador &&
e use o operador de comparação de string quantas vezes você tiver para comparar.
Melhor ainda, use a declaração case
:
case "${SERVER_NAME}" in
"$BITBUCKET" | "$CONFLUENCE" | "$CROWD" | "$JIRA" | "$JENKINS") ;; # do nothing for these servers
*)
# your original code here...
;;
esac
Você não está conseguindo comparar nada nas seguintes declarações ou declarações. Considere isto:
#!/bin/bash
if [[ $1 == "foo" || $1 == "bar" ]]; then
echo "foo or bar"
else
echo "not foo or bar"
fi
Isto é assim após a execução:
./orTest.sh bar
foo or bar
./orTest.sh foo
foo or bar
./orTest.sh foobar
not foo or bar
Em outras palavras, o que @Dmitry Grigoryev escreveu:
use string comparison operator as many times as you have strings to compare
Isso está errado :
#!/bin/bash
if [[ $1 == "foo" || "bar" ]]; then
echo "foo or bar"
else
echo "not foo or bar"
fi
Exemplos:
/orTestFail.sh bar
foo or bar
./orTestFail.sh foo
foo or bar
./orTestFail.sh foobar
foo or bar
Tags bash