Quebrando linhas longas com operadores de comparação em um shell script

3

no meu código bash, às vezes eu uso parâmetros longos em operadores de comparação para testar o "OR"

como o seguinte:

if [[ $production_check_linux_disks_quantity == false  ]] || [[ $production_linux_mount_point_reference_to_ambari_definition == false ]] || [[ $production_check_linux_mount_point_quantity == false ]] || [[ $production_show_linux_disks_simulation == false ]]
then

problema é que a sintaxe é muito longa e feia

alguma ideia de como criá-lo mais curto e elegante?

    
por yael 28.12.2017 / 08:58

1 resposta

2

Você pode dividir a linha no || . Na verdade, você pode quebrar a linha em qualquer operador de controle . Assim, a qualquer || , ! , && , & , ; , ;; , | , |& , ( ou ) .

Esta é a sintaxe correta para o seu exemplo, por exemplo, não há necessidade de \ :

if [[ $production_check_linux_disks_quantity == false  ]] || 
   [[ $production_linux_mount_point_reference_to_ambari_definition == false ]] || 
   [[ $production_check_linux_mount_point_quantity == false ]] || 
   [[ $production_show_linux_disks_simulation == false ]]; then
    echo yes
fi

Você precisa de \ para conectar várias linhas se elas não terminarem com um operador de controle, mas não quando elas terminarem.

Além disso, observe que if [[ $var == false ]] está verificando se o valor da variável $var é a string false e é melhor escrito como if [[ $var = 'false' ]] . Seu código sugere que você espera que ele seja avaliado como verdadeiro se $var for -1 ou 0 ou não definido ou algo assim.

    
por 28.12.2017 / 09:39