Combinando a condição if-else-if com uma expressão lógica

0

A expressão a seguir é a maneira correta de combinar a instrução if-else if?

 if [ $TO_MAJOR -eq 7 ] ; then
   if [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ]; then
    echo "AE port not supported"

    elif [ $TO_MINOR -lt 3 ] ; then
            echo "AE port not supported"
    fi
 fi

para

 if [ [ $TO_MAJOR -eq 7 ] -a [ [ $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 ] -o [ $TO_MINOR -lt 3 ] ] ]; then
        echo "AE port not supported"
        fi
    
por Austin Philip D'silva 17.08.2015 / 08:46

1 resposta

1

Você tem muitos colchetes no segundo código. [ é sinônimo de test . Então, existem duas maneiras de fazer o que você quer. Uma é fazer tudo dentro de uma única instrução de teste, caso em que há apenas um conjunto de colchetes:

if [ \( $TO_MAJOR -eq 7 -a $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 \) -o $TO_MINOR -lt 3 ]; then

O outro é usar os operadores && e || do shell para conectar vários comandos de teste

if [ $TO_MAJOR -eq 7 ] && ...

Mas o que você tem não funciona porque, embora [ seja sinônimo de test , [ não faz sentido em uma instrução test .

    
por 17.08.2015 / 08:58