Posso colocar mais de uma condição em se?

1

É possível colocar mais de uma condição em uma declaração if?

if  [ "$name" != "$blank" && "$age" == "$blank" ]; then

É possível? Se não como eu devo fazer isso?

    
por Zac 11.01.2015 / 13:32

2 respostas

6

Com a sintaxe [ expression ] (POSIX Standard), você pode usar o seguinte:

if [ "$name" != "$blank" ] && [ "$age" = "$blank" ]; then
   echo true
fi

Mas na sintaxe [[ expression ]] você pode usar as duas condições:

if [[ $name != "$blank" && $age == "$blank" ]]; then
   echo true!
fi

Duas vantagens de [[ sobre [ :

  1. Nenhuma divisão de palavras ou expansão glob será feita para [[ e, portanto, muitos argumentos não precisam ser citados (com a exceção do lado direito de == e != , que é interpretado como um padrão se não for citado).
  2. [[ mais fácil de usar e menos propenso a erros.

Desvantagem de [[ : só é suportado em ksh, bash e zsh, não na planície Bourne / POSIX sh.

Minha referência e boa página para comparar [[ e [ : FAQ da bash

Implicações de segurança de esquecendo-se de citar uma variável em shells bash / POSIX

    
por 11.01.2015 / 13:39
4

No entanto, outra possibilidade não mencionada por @SepahradSalour é usar -a operator:

if [ "$name" != "$blank" -a "$age" = "$blank" ]; then

BTW, não se esqueça de citar corretamente todas as variáveis separadamente .

    
por 11.01.2015 / 13:46