본문 바로가기
Linux/Bash

[Bash] 조건문 (if)문법, 사용법 및 예제

by A6K 2020. 11. 4.

리눅스에서 Bash 스크립트를 작성할 때 조건문의 다양한 사용 문법이 생각이 안 날때가 많았다. 스크립트를 작성하거나 작성된 스크립트를 해석할 때 도움이 되고자 Bash 조건문의 문법을 정리해보자.

Bash에서 조건문은 다음과 같은 문법을 따른다.

if [ expression1 ]
then
    statement1
elif [ expression2 ]
then
    statement2
else
    statement3
fi

일반적인 프로그래밍 언어의 조건문과 크게 다르지 않다.

expression1, expression2 부분에 사용할 수 있는 비교 연산은 다음과 같다.

Bash if - 정수 비교

사용예 의미
if [ "$a" -eq "$b" ] $a와 $b가 같은 경우 (equal)
if [ "$a" -ne "$b" ] $a와 $b가 다른 경우 (not equal)
if [ "$a" -lt "$b" ] $a가 $b 보다 작은 경우 (less than)
if (( "$a" < "$b" ))
if [ "$a" -gt "$b" ] $a가 $b 보다 큰 경우 (greater than)
if (( "$a" > "$b" ))
if [ "$a" -le "$b" ]  $a가 $b 보다 작거나 같은 경우 (less than or equal to)
if (( "$a" <= "$b" ))
if [ "$a" -ge "$b" ]  $a가 $b 보다 크거나 같은 경우 (greater than or equal to)
if (( "$a" >= "$b" ))

영어 단어와 함께 기억하면 편하다.

Bash if - 문자열 비교

사용예 의미
if [ "$a" == "$b" ]  두 문자열이 같은 경우
if [ "$a" = "$b" ] 두 문자열 모두 빈 칸인 경우
if [ "$a" != "$b" ]  두 문자열이 다른 경우
if [ -z "$a" ]  문자열의 길이가 0인 경우
if [ -n "$a" ] 문자열의 길이가 0이 아닌 경우

Bash if - 파일 연산

사용예 의미
if [ -a <FILE> ] 파일이 존재하는 경우
if [ -d <FILE> ] 파일이 존재하고, 디렉토리인 경우
if [ -f <FILE> ] 파일이 존재하고, 정규파일인 경우
if [ -x <FILE> ] 파일이 존재하고, 실행가능한 파일인 경우 (Excutable)
if [ -b <FILE> ] 파일이 존재하고, 블럭 디바이스인 경우
if [ -c <FILE> ] 파일이 존재하고, 캐릭터 디바이스인 경우
if [ -e <FILE> ] 파일이 존재하는 경우
if [ ! -e <FILE> ] 파일이 존재하지 않는 경우
if [ -g <FILE> ] 파일이 존재하고, set-group-id 파일인 경우
if [ -h <FILE> ] 파일이 존재하고, 심볼릭 링크인 경우
if [ -L <FILE> ] 파일이 존재하고, 심볼릭 링크인 경우
if [ -k <FILE> ] 파일이 존재하고, Sticky bit가 세팅되어 있는 경우
if [ -p <FILE> ] 파일이 존재하고, 네임드파이프(FIFO)인 경우
if [ -r <FILE> ] 파일이 존재하고, 읽을 수 있는 경우
if [ -s <FILE> ] 파일이 존재하고, 사이즈가 0보다 큰 경우
if [ -S <FILE> ] 파일이 존재하고, 소켓인 경우
if [ -t <FILE> ] FD가 열려진 터미널인 경우
if [ -u <FILE> ] 파일이 존재하고, SUID(set user id) 비트가 설정되어 있는 경우
if [ -w <FILE> ] 파일이 존재하고, 쓸 수 있는 경우
if [ -O <FILE> ] 파일이 존재하고, 소유자가 현재 사용자인 경우
(effective user ID)
if [ -G <FILE> ] 파일이 존재하고, 소유그룹이 현재 그룹인 경우
(effective user group)
if [ -N <FILE> ] 파일이 존재하고, 지난번 이후로 수정된 경우
if [ <FILE1> -nt <FILE2> ] FILE1이 FILE2보다 새로운 파일인 경우 (newer than)
if [ <FILE1> -ot <FILE2> ] FILE1이 FILE2보다 오래된 파일인 경우 (older than)
if [ <FILE1> -et <FILE2> ] FILE1이 FILE2의 하드링크인 경우

Bash if - 논리연산

사용예 의미
if [[ condition1 && condition2 ]] condition1, condition2가 모두 참인 경우
if [ condition1 ] && [ condition2 ]
if [ condition1 -a condition2 ]
if [[ condition1 || condition2 ]] condition1, condition2중 하나라도 참인 경우
if [ condition1 ] || [ condition2 ]
if [ condition1 -o condition2 ]
if [ ! condition] condition이 참이면 거짓, 거짓이면 참
if [ ( EXPR ) ] EXPR의 결과값을 반환

Bash if - 기타

사용예 의미
if [ -o OPTIONNAME ]  Shell 옵션 "OPTIONNAME"이 enable 된 경우

 

댓글