Quando é 'se' não é necessário?

5

Em alguns scripts, vi as instruções condicionais if escritas como:

if [ some_conditional_statement ]; then
    # do stuff
fi

ou

[ some_conditional_statement ] && #do stuff

É o segundo exemplo equivalente (a parte do material só será executada se a condicional for verdadeira), mas útil apenas quando você precisar executar apenas um comando como:

[ -f "/path/to/some/file" ] && . /path/to/some/file

Ou há outra diferença que eu sinto falta?

    
por SnakeDoc 01.10.2014 / 19:12

2 respostas

3

A cláusula if executará o que estiver entre then e fi se a expressão após o if for verdadeira, o que, em termos de shell, significa que seu valor de saída é zero. Você pode usar um comando ou os colchetes que são apenas um formulário curto para o comando test . A construção a && b significa: "avaliar a e se a sua verdadeira também avaliar b". Portanto, seus dois exemplos são equivalentes, mas a cláusula if é mais legível e pode ser usada para agrupar vários comandos.

    
por 01.10.2014 / 19:26
2

OK, presumo que você entenda que [ condition ] (ou [[ condition ]] no bash) é, essencialmente, um comando que não tem efeitos colaterais, mas isso avalia a condição e fornece um status de saída apropriado. Você mencionou encadear && s juntos. Você pode fazer isso;

A  &&  B  &&  C

é equivalente a

if A
then
    if B
    then
        C
    fi
fi

Mas parece que você está perguntando como fazer

if A
then
    B
    C
fi

Você pode fazer isso com

A  &&  (B; C)

ou

A  &&  { B; C;}

Notas:

  • Os parênteses dão uma subchave; isto é, os comandos B e C são executados em um processo filho. Assim sendo, comandos como atribuições de variáveis ou cd não terão efeito no shell pai. Os comandos entre chaves são executados no mesmo processo que o comando A .
  • Na sintaxe de chave, deve ser um espaço depois de { e ; (ou & ) antes do } .

Minha opinião:

É altamente recomendável usar a sintaxe if - then - else para melhorar a legibilidade.

    
por 01.10.2014 / 23:20