코딩을 하다 보면 특정 조건에 따라 다른 동작을 수행해야 하는 경우가 자주 생깁니다. 여기서 말하는 조건(condition)은 true 또는 false로 평가되는 불리언 표현식을 의미합니다.
이렇게 조건의 참·거짓에 따라 서로 다른 코드 블록을 실행하도록 도와주는 문장을 조건문(conditional statement)이라고 부릅니다.
if...else는 가장 널리 쓰이는 조건문 중 하나입니다. 다른 프로그래밍 언어와 마찬가지로 Bash 셸 스크립트 역시 if...else 문법을 지원하며, 이번 글에서는 그 사용 방법을 차근차근 살펴보겠습니다.
if 문의 기본 구조
Bash에서는 if 문을 상황에 따라 여러 형태로 사용할 수 있습니다. 대표적인 구조는 다음과 같습니다.
if문만 단독으로 사용:if...then...fiif와else를 함께 사용:if...then...else...fi- 여러 개의 조건 분기가 필요할 때:
if...elif...else...fi
단일 if 문 사용 방법
조건 하나만 검사할 때 사용하는 기본 문법은 아래와 같습니다.
if [ condition ]
then
statement
fi
여기서 주의할 점은 대괄호 안쪽의 공백도 문법의 일부라는 것입니다. 공백을 제거하면 스크립트가 제대로 동작하지 않거나 오류가 발생할 수 있으니 반드시 지켜야 합니다.
두 숫자를 비교해 첫 번째 숫자가 더 작은지 확인하는 간단한 예제를 살펴보겠습니다.
#! /bin/sh
a=5
b=30
if [ $a -lt $b ]
then
echo "a is less than b"
fi
위 스크립트를 실행하면 if [ $a -lt $b ] 조건이 참(True)으로 평가되어, if 블록 내부의 문장이 실행됩니다.
실행 결과:
a is less than b
if ... else 문 사용 방법
조건이 거짓일 때 실행할 기본 동작을 지정하고 싶다면 else 절을 추가하면 됩니다. 문법은 다음과 같습니다.
if [ condition ]
then
statement
else
do this by default
fi
두 숫자를 비교해 어느 쪽이 큰지 판별하는 예제입니다. 이번에는 a가 99, b가 45이므로 if [ $a -lt $b ] 조건이 거짓(False)이 되어 else 블록이 실행됩니다.
#! /bin/sh
a=99
b=45
if [ $a -lt $b ]
then
echo "a is less than b"
else
echo "a is greater than b"
fi
실행 결과:
a is greater than b
if ... elif ... else 문 사용 방법
조건이 세 개 이상으로 나뉘거나 더 복잡한 비교 로직이 필요하다면 elif를 사용해 다중 분기를 만들 수 있습니다. 문법은 다음과 같습니다.
if [ condition ]
then
statement
elif [ condition ]
then
statement
else
do this by default
fi
복합 조건을 만들 때는 AND 연산자인 -a와 OR 연산자인 -o를 함께 활용할 수 있습니다.
다음 예제에서는 세 변의 길이를 입력받아 삼각형의 종류를 판별해 보겠습니다.
- 부등변삼각형(Scalene): 세 변의 길이가 모두 다른 삼각형
- 이등변삼각형(Isosceles): 두 변의 길이가 같은 삼각형
- 정삼각형(Equilateral): 세 변의 길이가 모두 같은 삼각형
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi
위 스크립트는 사용자에게 삼각형의 세 변을 입력받은 뒤 각 변을 비교해 삼각형의 종류를 출력합니다. 예를 들어 3, 4, 5를 입력하면 세 변의 길이가 모두 다르므로 부등변삼각형(SCALENE)으로 판별됩니다.
3
4
5
SCALENE
알아두면 좋은 추가 팁
숫자 비교에 사용되는 주요 연산자를 정리하면 다음과 같습니다.
-eq: 두 값이 같음-ne: 두 값이 같지 않음-gt: 왼쪽 값이 큼-ge: 왼쪽 값이 크거나 같음-lt: 왼쪽 값이 작음-le: 왼쪽 값이 작거나 같음
또한 최신 Bash 환경에서는 테스트 연산자 [ ] 대신 더 강력한 [[ ]](이중 대괄호)를 사용하는 것이 권장됩니다. [[ ]]는 변수에 공백이 포함된 경우에도 안전하게 동작하고, &&와 || 논리 연산자를 직접 지원하기 때문에 가독성과 안정성 면에서 유리합니다.
마무리
if...else 계열의 조건문을 활용하면 특정 조건에 따라 코드 흐름을 손쉽게 분기시켜 훨씬 유연하고 동적인 스크립트를 작성할 수 있습니다. 이번 튜토리얼에서는 Bash if...else 문법의 기본 구조부터 elif를 활용한 다중 분기, 그리고 -a, -o를 이용한 복합 조건까지 다양한 예제와 함께 살펴보았습니다.
배운 내용은 직접 자신의 스크립트에 적용해 보면서 익히는 것이 가장 좋습니다. 간단한 조건 분기부터 시작해 점차 복잡한 로직으로 확장해 나가시길 바랍니다.