IT/리눅스

[Linux] bash 쉘 스크립트 if 조건문 사용법과 비교식

몬스터r 2022. 12. 18. 21:01

[Linux] bash 쉘 스크립트 if 조건문 사용법과 비교식

오늘은 bash shell script에서 반드시 알아야 할 if 조건문에 대해서 알아보도록 하자.

 

if문은 조건을 비교하여 참/거짓 여부를 구분하여 참일 경우 수행될 부분과 거짓일 경우 수행될 부분으로 나뉜다.

기본 형식은 다음과 같다.

 

if 조건문 기본 형식

if [ 값1 조건식 값2 ]; then
	실행문 
elif [ 값1 조건식 값2 ]; then
	실행문
else
	실행문
fi

 

주의할 점은 대괄호 와 값 사이에서 공백(space)는 무조건 있어야 한다. 초보자 때 if문 에러 때문에 고생을 많이 했던 경험이 있다.

 

if 조건문 기본 형식 예제

# cat test.sh

A=1
B=2
C=3

if [ $A == 1 ]; then
        echo $A
elif [ $B == 2 ]; then
        echo $B
else
        echo $C
fi

# test.sh 실행 시 1 출력

if문은 순차적으로 실행되기 때문에 elif에서 비교문이 참일지라도 if에서 참이면 if 가장 처음의 실행문만 동작한다.

elif의 실행문이 동작하기 위해서는 첫 번째 조건식이 거짓이어야만 동작한다.

 

이제 if 조건문의 기본 형식은 알았으니 조건식에 대해 더 알아보도록 하자. 사용할 수 있는 조건식은 다음과 같다.

 

비교연산자 사용

== 값1과 값2가 같으면 참
!= 값1과 값2가 다르면 참
> 값1이 값2보다 크면 참
>= 값1이 값2보다 크거나 같으면 참
< 값1이 값2보다 작으면 참
<= 값1이 값2보다 작거나 같으면 참
&&  조건식1과 조건식2 모두 참이면 참
|| 조건식1과 조건식2 중 둘 중 하나라도 참이면 참

 

비교식 사용

-z 값이 공백이면 참
-n 값이 공백이 아니면 참
-eq 값1과 값2가 같으면 
-ne 값1과 값2가 다르면 참
-ge 값1이 값2보다 크거나 같으면 참
-gt 값1이 값2보다 크면 참
-le 값1이 값2보다 작거나 같으면 참
-lt 값1이 값2보다 작으면 참
-a  조건식1과 조건식2 모두 참이면 참
-o 조건식1과 조건식2 중 둘 중 하나라도 참이면 참

 

파일 확인

-f 파일이 regular 파일이면 참
-d 파일이 디렉토리면 참
-L 파일이 심볼릭 링크면 참
-r 파일의 본인 권한이 r이면 참
-w 파일의 본인 권한이 w면 참
-x 파일의 본인 권한이 x면 참
-s 파일 크기가 0이 아니면 참
-S 파일이 소켓이면 참
-nt 파일1이 파일2보다 최신 파일이면 참
-ot 파일1이 파일2보다 오래된 파일이면 참
-ef 파일1과 파일2가 같은 파일이면 참

 

if 조건문 오류 발생

if [ 1 -eq 1 ]; then
	echo 1
fi
# 1 출력

if [ "A" -eq "A" ]; then
	echo 1
fi
# integer expression expected 에러 발생

위 경우 첫 번째 if 조건문은 잘 동작하지만, 두 번째 조건문은 "integer expression expected" 라는 오류가 발생한다. 비교연산자를 사용한다면 오류가 나지 않지만 비교식을 사용한다면 에러가 발생한다. 그 이유는 문자열을 비교식을 사용하려면 대괄호를 두 개로 감싸주어야 오류가 발생하지 않는다.

if [[ "A" -eq "A" ]]; then
	echo 1
fi
# 1 출력