조건문에서 논리연산자 and, or 사용하기

쉘스크립트의 조건문에서 기본적인 조건식의 형태를 알 수 있다.

그러나 하나의 조건만으로는 부족한 경우가 많기 때문에 논리 연산자인 AND 와 OR 를 사용해서 여러 조건들을 묶어낼 수 있어야 한다.

쉘스크립트에서는 이러한 논리합과 논리곱을 아래와 같이 사용한다.

if [ 1 -lt 3 ] && [ "2" -eq 2 ] ; then
    echo "1 < 3 and 2 == 2"
fi

여러 조건 [ expression ] 들을 &&(and) 나 ||(or) 로 묶어서 사용할 수 있다.

만약 이런 논리 연산자들을 여러개 중첩해서 사용해야 할 경우, 다른 프로그래밍에서 하듯 괄호를 사용해 묶어줄 수 있다.

아래 코드에서 첫번째 조건인 [ 1 -lt 2 ] 는 1 < 2 이므로 참이 된다.

두번째 조건은 () 로 묶인 두 조건이 되는데, && 로 묶였기 때문에 [ 1 == 2 ] 에서 거짓이 나와 최종적으로 거짓이 된다.

그러나 첫번째 조건과 || 로 묶여있으므로 최종적으로 참이 되며, 더 많은 괄호를 사용해 여러 조건들에 논리연산자를 붙여 줄 수 있다.

if [ 1 -lt 2 ] || ( [ 2 == 2 ] && [ 1 == 2 ] ) ; then
    echo SUCCESS
fi


조건을 &&|| 로 묶지 않더라도, 조건 내에서 [ -a ](AND) 혹은 [ -o ](OR) 연산자를 사용함으로써 같은 결과를 낼 수 있다.

아래 코드는, 두 조건을 && 로 묶은 것과 동일하다.

if [ 1 -lt 3 -a "2" -eq 2 ] ; then
    echo "1 < 3 and 2 == 2"
fi