Bash OU operador não avaliando múltiplas variáveis [closed]

0

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

    
por eekfonky 21.11.2016 / 11:44

3 respostas

3

Eu acho que você quer verificar uma string em mais strings. Faça isso:

if [[ ! "$SERVER_NAME" =~ ^($BITBUCKET|$CONFLUENCE|$CROWD|$JIRA|$JENKINS)$ ]]; then ...
    
por 21.11.2016 / 11:59
7

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
    
por 21.11.2016 / 11:49
1

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
    
por 21.11.2016 / 11:54

Tags