Bash 조건문은 프로그래머가 지정한 불리언(boolean) 조건이 참인지 거짓인지에 따라 서로 다른 연산이나 동작을 수행합니다. 특정 조건이 만족되는지에 따라 셸 프로그램의 서로 다른 부분을 실행할 수 있으며, 이러한 분기(branching) 능력이야말로 셸 스크립트를 강력하게 만드는 핵심 요소입니다.
Bash에서 사용할 수 있는 조건문은 다음 네 가지입니다.
- if..then..fi 문 (단순 If)
- if..then..else..fi 문 (If-Else)
- if..elif..else..fi 문 (Else If 사다리)
- if..then..else..if..then..fi..fi (중첩 If)
이 구조들은 이전에 살펴본 awk의 if 문과도 유사합니다.
1. Bash if..then..fi 문
if [ 조건식 ]
then
명령문1
명령문2
...
fi
이 if 문은 단순 if(simple if) 문이라고도 부릅니다. 주어진 조건식이 참이면 "then"과 "fi" 키워드 사이에 둘러싸인 문장들이 실행됩니다. Bash에서는 종료 상태(exit status)가 0이면 성공, 즉 참으로 간주되므로 조건식이 0을 반환하면 해당 문장 목록이 실행됩니다.
if then fi 예제:
#!/bin/bash count=100 if [ $count -eq 100 ] then echo "Count is 100" fi
변수 count의 값이 100이므로 조건식이 참이 되어 화면에 "Count is 100"이 출력됩니다.
2. Bash if..then..else..fi 문
if [ 조건식 ]
then
명령문1
명령문2
...
else
명령문3
명령문4
...
fi
조건식이 참이면 명령문1과 명령문2가 실행됩니다. 반대로 조건식이 거짓(0이 아닌 값을 반환)이면 else 부분으로 건너뛰어 명령문3과 명령문4를 실행합니다. if 또는 else 부분의 실행이 끝나면 그 아래 후속 문장부터 실행이 정상적으로 이어집니다.
if then else fi 예제:
#!/bin/bash count=99 if [ $count -eq 100 ] then echo "Count is 100" else echo "Count is not 100" fi
이 예제에서 count는 99이므로 첫 번째 조건이 거짓이 되고, 대신 else 블록의 "Count is not 100"이 출력됩니다.
3. Bash if..elif..else..fi 문
if [ 조건식1 ]
then
명령문1
명령문2
...
elif [ 조건식2 ]
then
명령문3
명령문4
...
else
명령문5
fi
여러 개의 코드 블록 중 하나만 골라 실행하고 싶다면 if..elif..else 문을 사용하면 됩니다. 먼저 조건식1을 검사하여 참이면 명령문1, 2를 실행합니다. 조건식1이 거짓이면 조건식2를 검사하고, 모든 조건식이 거짓일 경우 else 블록으로 진입해 그 안의 문장들을 실행합니다.
if then elif then else fi 예제:
#!/bin/bash count=99 if [ $count -eq 100 ] then echo "Count is 100" elif [ $count -gt 100 ] then echo "Count is greater than 100" else echo "Count is less than 100" fi
여기서 -eq는 같음(equals), -gt는 큼(greater than)을 의미하는 숫자 비교 연산자입니다.
4. Bash 중첩 if(Nested if)
if [ 조건식1 ]
then
명령문1
명령문2
...
else
if [ 조건식2 ]
then
명령문3
...
fi
fi
Bash에서는 if 문과 else 문을 중첩해서 사용할 수 있습니다. 키워드 "fi"는 내부 if 문의 끝을 나타내며, 열린 모든 if 문은 반드시 자신만의 "fi"로 닫아야 한다는 점에 유의하세요.
앞서 소개한 if..elif..else 예제는 아래와 같이 중첩 if 형태로 바꿔 작성할 수도 있습니다.
#!/bin/bash
count=99
if [ $count -eq 100 ]
then
echo "Count is 100"
else
if [ $count -gt 100 ]
then
echo "Count is greater than 100"
else
echo "Count is less than 100"
fi
fi
마치며
다음 글에서는 실무에 바로 적용할 수 있는 예제와 함께 Bash 조건 표현식을 활용하는 방법을 자세히 알아보겠습니다.
추천 도서
Bash 101 Hacks — Ramesh Natarajan 저. 저자는 대부분의 시간을 리눅스 환경에서 보내는 만큼 Bash 커맨드 라인과 셸 스크립팅의 열렬한 팬입니다. 15년 전 다양한 *nix 계열에서 일할 때는 C 셸과 Korn 셸로 많은 코드를 작성했고, 이후 시스템 관리자로 리눅스를 다루면서 가능한 모든 작업을 Bash 셸 스크립트로 자동화했다고 합니다. 이러한 경험을 바탕으로 집필된 이 전자책에는 Bash 커맨드 라인과 셸 스크립팅 관련 실용적인 예제 101가지가 담겨 있습니다. Bash를 제대로 마스터하고 싶다면 이 책이 큰 도움이 될 것입니다.