if-else-if 조건을 논리 표현식으로 결합

if-else-if 조건을 논리 표현식으로 결합

다음 표현식은 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

도착하다

 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

답변1

두 번째 코드에는 괄호가 너무 많습니다. [예의 동의어입니다 test. 따라서 원하는 작업을 수행하는 방법에는 두 가지가 있습니다. 하나는 단일 테스트 문에서 모든 작업을 수행하는 것입니다. 이 경우에는 괄호 세트만 사용합니다.

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

다른 하나는 쉘의 &&and ||연산자를 사용하여 여러 테스트 명령을 연결하는 것입니다.

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

[그러나 while은 와 동의어 이고 test선언 [에서는 의미가 없기 때문에 당신이 가지고 있는 것은 작동하지 않습니다 test.

관련 정보