리눅스 쉘스크립트 if문 사용법 및 예제

개요

if 문은 c언어의 선택문 중의 하나다. 참/거짓을 나눠서 어떠한 결과값을 얻어내기 위해서 사용되는 구문이다. 리눅스 쉘스크립트 를 공부하면서도 이런 if문 또한 자주 사용하게 된다. 그래서 이번 포스팅에서는 자주사용되는 간단한 문법을 한 번 알아보도록 한다.

설명

[test 와 [] 명령]

대부분의 스크립트는 []명령을 사용하여 참/거짓을 판별하게 된다. 보통 test와 []는 같은 의미를 지닌다고 할수 있는데 예를 들어보도록 하겠습니다.

test.sh라는 파일이 있는가를 알아보려고 한다.

if test -f test.sh

then
...
fi

if [ -f test.sh

then
....
fi

위의 첫번째와 두번째는 같은 내용을 실행하게 된다.

여기에서 []괄호 사이와 검사할 조건사이에는 반드시 공백을 하나씩 두어야 한다. 이게 정말 중요하다.

조건절에서 test 명령에 세가지 형태의 타입을 사용 할 수 있다.

수치(산술) 비교

[ $A -eq $B ] : A와B의 값이 같은경우
[ $A -ne $B ] : A와B의 값이 다른경우
[ $A -gt $B ] : A가B보다 큰경우
[ $A -lt $B ] : A가B보다 작은경우
[ $A -ge $B ] : A가B보다 크거나 같은 경우
[ $A -le $B ] : A가B보다 작거나 같은경우

*소주점이하의 숫자는 무시되므로 유의해야 된다.

문자열 비교

[ “String1” = “String2” ] : 두 문자열이 같은경우 참
[ “String1 != “String2” ] : 두 문자열이 다른경우 참
[ -z “String” ] : 문자열의 길이가 0인경우 참
[ -n “String” ] : 문자열의 길이가 0이 아닌경우 참

파일비교

[ -s filename ] : file이 존재하며서 크기가 0보다 큰경우 참
[ -f filename ] : directory가 아닌 file인 경우 참
(크기 0인경우 포함)
[ -d directoryname] : file이 아닌 directory인 경우 참
[ -w filename ] : 쓰기가 가능한 경우 참
[ -r filename ] : 읽기가 가능한 경우 참
[ -g filename ] : file상에 set-group-id가 설정되어되었으면 참
[ ! -option filename ] : option의 조건이 거짓이 되는경우 참

테스트가 참인지 수행하기 이전에, 모든 파일 조건문은 파일이 이미 존재한다는 것을 가정하고 있다. 위의 옵션들은 test 명령에서 공통적으로 사용되는것이라고 할 수 있다.

위의 조건절을 참조함으로서 그리고 []를 사용함으로서 조건절을 다룰수 가 있게 되는것이다.

if 조건

then 문장
else
문장
fi

의 형식으로 이뤄진다. 시작을 if로 하고 종료를 fi 로 한다고 기억하면 쉽다.

예) 사용자에게서 질문을 대한 응답을 입력받아, 이에 기반하여 조건절으로 적절한 구문을 실행시키는 과정을 보도록 하겠다.

ex)

!/bin/sh

echo " Are you mageoli?"
read You

if [ $You = "yes" ]
then
echo "Yes, I am Mageoli!!!"
else
echo " No, I am Mageoli!!"
fi

exit 0

c언어를 기본적으로 사용해본 사람들이라면 어려움 없이 이해할 수 있다. 물론 쉘스크립트에서도 c언어 문법을 그대로 사용해도 무방하다.

elif 조건

위의 예를 보면, yes이외의 응답은 모두 no를 받아들이게 된다. elif를 사용하면 여러 조건을 검사할 수 있기 때문에 조금 더 효율적으로 구문을 작성할 수 있다.

예를들어보면,

!/bin/sh

echo "Are you mageoli? please answer yes or no"
read you

if [ $you = "yes" ]
then
echo " Yes, I am mageoli"
elif [ $you = "no" ]
then
echo " No !!!! Oh no..."
echo " I am Yang Kye Jeon"
else
echo " Sorry, $you not recognized, Enter the yes or no"
exit 1
fi

exit 0

이런식으로 된다고 할 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다