Tentei verificar se a PHONE_TYPE
variável contém um dos três valores válidos.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
O código acima não funcionou para mim, então tentei isso:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Existem maneiras mais limpas para esse tipo de tarefa?
shell-script
shell
munish
fonte
fonte
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
Boas respostas e uma lição inestimável;) Só quero suplementar com uma nota.
Que tipo de teste se escolhe usar depende muito do código, estrutura, ambiente etc.
Uma alternativa poderia ser usar uma opção ou
case
instrução como em:Como segunda observação, você deve ter cuidado usando nomes de variáveis em maiúsculas. Isso evita a colisão entre variáveis introduzidas pelo sistema, que quase sempre são todas maiúsculas. Assim, em
$phone_type
vez de$PHONE_TYPE
.Embora esse seja seguro, se você tem o hábito de usar todas as letras maiúsculas, um dia você pode dizer
IFS="boo"
e está em um mundo de mágoa.Também tornará mais fácil identificar qual é o quê.
Não é preciso, mas um seria fortemente considerar.
Também é presumivelmente um bom candidato para uma função. Isso torna o código mais fácil de ler e manter. Por exemplo:
fonte
Você deve usar ANDs, não ORs.
ou
fonte
Para corrigir uma resposta acima (como ainda não posso comentar):
Observe que você precisa pelo menos do bash 4 para esse uso de = ~
Ele não funciona no bash 3.
Eu testei no MS Windows 7 usando o bash 4.3.46 (funciona bem) e o bash 3.1.17 (não funcionou)
O LHS do = ~ deve estar entre aspas. Acima, PHONE_TYPE = "SPACE TEL" também corresponderia.
fonte
Use [[em vez
fonte
[[
vs[
não ajuda com a lógica estar desativada.Apenas uma proposta de variação baseada na solução @ 0x80:
fonte