Shell Script의 if문과 case문의 사용 방법에 대해서 알아보겠습니다.

이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다.

1. if문

if문은 어떤 조건을 체크하여, 조건에 일치하면 특정 구문을 수행하고 그렇지 않으면 다른 동작을 하는데 사용됩니다.

아래 예제는 value가 10일 때와 아닐 때 조건을 체크하여 다른 텍스트를 출력합니다.

  • if [ $value -eq 10 ]; then에서 조건은 $value -eq 10 입니다.
  • $value -eq 10에서 -eq는 “is equal to”의 의미로, $value가 10과 같으면 true, 그렇지 않으면 false가 리턴됩니다.
#!/bin/bash

value=10

if [ $value -eq 10 ]; then
    echo "값은 10입니다."
else
    echo "값은 10이 아닙니다."
fi

Output:

$ bash example.sh
값은 10입니다.

조건 연산자

-eq 외에, 아래와 같이 다양한 조건 연산자들이 있습니다.

Int 비교 연산자 의미 예제
-eq is equal to if [ “$a” -eq “$b” ]
-ne is not equal to if [ “$a” -ne “$b” ]
-gt is greater than if [ “$a” -gt “$b” ]
-ge is greater than or equal to if [ “$a” -ge “$b” ]
-lt is less than if [ “$a” -lt “$b” ]
-le is less than or equal to if [ “$a” -le “$b” ]
< is less than ((“$a” < “$b”))
<= is less than or equal to ((“$a” <= “$b”))
> is greater than ((“$a” > “$b”))
>= is greater than or equal to ((“$a” >= “$b”))

if-elif-else

if-elif-else는 아래와 같이 동작합니다.

  • if의 조건이 일치할 때 if문 수행
  • if의 조건이 일치하지 않을 때 elif의 조건 확인
  • elif의 조건이 일치하지 않으면 else의 구문 수행

아래 예제는 if문에 -eq-lt 조건 연산자를 사용합니다.

#!/bin/bash

num1=10
num2=20

if [ $num1 -eq $num2 ]; then
    echo "두 숫자는 같습니다."
elif [ $num1 -lt $num2 ]; then
    echo "num1은 num2보다 작습니다."
else
    echo "num1은 num2보다 큽니다."
fi

Output:

$ bash example.sh
num1은 num2보다 작습니다.

2. case문

case문은 아래와 같은 포맷으로 사용할 수 있습니다.

  • case $fruit in : 케이스에서 $fruit의 값과 일치하는 조건이 있는지 확인
  • "apple") : fruit이 "apple"일 때 이 조건의 구문 실행
  • *) : 일치하는 조건이 없을 때, 이 구문 실행 (default)
#!/bin/bash

fruit="apple"

case $fruit in
    "apple")
        echo "사과입니다."
        ;;
    "banana")
        echo "바나나입니다."
        ;;
    "orange")
        echo "오렌지입니다."
        ;;
    *)
        echo "알 수 없는 과일입니다."
        ;;
esac

Output:

$ bash example.sh
사과입니다.

다른 예제

다른 예제로, 파일의 확장자에 따라서 다른 처리를 하는 코드입니다.

문자열을 비교할 때 정규식처럼 *를 사용하여 파일 이름은 비교하지 않고 확장자만 비교하고 있습니다.

#!/bin/bash

filename="document.docx"

case "$filename" in
    *.txt)
        echo "텍스트 파일입니다."
        ;;
    *.docx)
        echo "워드 문서 파일입니다."
        ;;
    *.pdf)
        echo "PDF 파일입니다."
        ;;
    *)
        echo "알 수 없는 파일 형식입니다."
        ;;
esac