[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 출력
'IT > 리눅스' 카테고리의 다른 글
[Linux] 디렉토리 삭제 방법, rmdir 명령어 사용 방법 (0) | 2022.12.26 |
---|---|
[Linux] 디렉토리 생성 방법, mkdir 명령어 사용방법 (0) | 2022.12.25 |
[Linux] 리눅스 cd 사용법, 디렉토리 이동 방법 (0) | 2022.12.25 |
[Linux] grep 명령어 사용법, 리눅스 문자열 검색 (0) | 2022.12.18 |
[Linux] bashrc의 PS1를 이용한 쉘프롬프트 환경 변경 (0) | 2022.12.17 |