shell 조건 연산자
OS/리눅스 & 유닉스 2012. 2. 11. 16:35(2) 테스트 연산자
[ ](대괄호) 안의 조건식에는 여러 종류의 테스트 연산자를 사용할 수 있으며, 연산자의 종류 및 기능은 다음과 같습니다..
* 다음 조건을 충족시킬 경우, true 리턴 -e : 존재하는 파일
-f : 보통 파일
-d : 파일이 디렉토리
-s : 파일 크기가 0이 아님
-z : 문자열이 null임. 길이가 0
-n : 문자열이 null이 아님
-c : 파일이 문자 디바이스(키보드, 모뎀, 사운드 카드..)
-b : 파일이 블럭 디바이스(플로피나 CD롬)
-p : 파일이 파이프
-h : 파일이 하드 링크
-L : 파일이 심볼릭 링크
-S : 파일이 소켓
-t : 파일 디스크립터가 터미널 디바이스와 연관 있음
-r : 테스트를 돌리는 사용자가 읽기 퍼미션을 갖고 있음
-w : 테스트를 돌리는 사용자가 쓰기 퍼미션을 갖고 있음
-x : 테스트를 돌리는 사용자가 실행 퍼미션을 갖고 있음
-g : 파일이나 디렉토리에 set-group-id 플래그가 세팅되어 있음
가령 예를 들자면,
if [ -d /tmp ]; then echo '/tmp 디렉토리가 존재합니다.'
else
echo '/tmp 디렉토리가 존재하지 않습니다.'
fi
위와 같이 사용하면 됩니다..
파일과 관련한 연산자일 경우는 연산자 뒤에 파일명이, 디렉토리와 관련한 연산자일 경우는 연산자 뒤에 디렉토리명이 명시되어야 합니다..
다음은 산술 비교 연산자 및 문자열 비교 연산자입니다..
산술 비교 연산자 | 문자열 비교 연산자 |
-eq (equal) | == |
-ne (not equal) | != |
-gt (greater than) |
|
-ge (greater than or equal) |
|
-lt (less than) |
|
-le (less than or equal) |
|
산술 비교 연산자는 수치 비교를 위해 사용되며, 다음과 같이 사용됩니다..
if [ ${input} -eq 0 ]; then echo 'input 값은 0과 같습니다.'
else
echo 'input 값은 0과 같지 않습니다.'
fi
문자열 비교 연산자는 수치 비교를 위해 사용되며, 다음과 같이 사용됩니다..
if [ ${input} == "test" ]; then echo 'input 값은 test 문자열과 같습니다.'
else
echo 'input 값은 test 문자열과 같지 않습니다.'
fi
'$(달러)' 문자로 시작되는 값은 변수를 의미합니다..
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(3) 논리 연산자
[ ](대괄호) 안의 조건식에 두 개 이상의 조건을 넣어야 할 경우 논리 연산자를 사용할 수 있으며, 연산자의 종류 및 기능은 다음과 같습니다..
-a : and, && -o : or, ||
논리 연산자의 사용법은 다음과 같습니다..
if [ 조건식1 -a 조건식2 ]; then ~
else
~
fi
다들 알고 계시겠지만, and 논리 연산자의 경우 '조건식1' 이 true 이어야지만 '조건식2' 로 넘어가며, '조건식1' 이 false인 경우 '조건식2' 의 체크없이 바로 else 구문으로 넘어가게 됩니다..
사용 예를 들자면, 다음과 같습니다..
if [ -f ${file1} -a -f ${file2} ]; then echo 'file1과 file2는 모두 파일입니다.'
else
echo 'file1과 file2가 모두 파일인 것은 아닙니다.'
fi
이상은 논리 연산자에 대한 사용법에 대해서 설명 드렸고, 다음은 자주 사용되는 연산자는 아니지만 추가로 덧붙입니다..
(4) 파일 생성 시기 비교 연산자
[ ](대괄호) 안의 조건식에 두 개의 파일 중 어떤 것이 더 먼저, 혹은 나중에 생성되었는지 알고자 할 경우 다음과 같은 비교 연산자를 사용할 수 있습니다..
f1 -nt f2 : f1파일이 f2파일보다 최신임(newer than)
f1 -ot f2 : f1파일이 f2파일보다 예전것임(older than)
위 연산자에 대한 예시는 따로 들지 않겠습니다..
이상으로 if문에서 자주 사용되는 연산자들과 사용법에 대해서 알아보았구요..
예제 스크립트로 바로 넘어갈까 했는데 한 가지 더 설명드리고 예제 스크립트를 보여 드리는 편이 나을 것 같아서 잠깐 언급하도록 하겠습니다..
* Shell Script 에서 input 값 받아 처리하기
우리가 Shell Script를 작성하다 보면 외부로부터 받은 input 값을 스크립트 내부에서 처리해야 하는 경우가 종종 발생하게 됩니다..
가령, ./test.sh [input_parameter1] [input_parameter2] 와 같은 식으로 말이죠..
위와 같이 외부로부터 받은 input 값은『 위치 매개변수 』를 통하여 처리하면 됩니다..
$1, $2, $3, ... : input_parameter1은 $1 위치 매개변수로, input_parameter2는 $2 위치 매개변수로 처리 ※ $0 : 해당 Shell Script의 이름
예를 들어, 스크립트로 넘어온 input 값이 0인지 아닌지 비교하는 스크립트(ex. number_compare.sh)를 작성하고 싶다 하면 다음과 같이 하면 됩니다..
#!/bin/sh if [ $1 -eq 0 ]; then
echo 'input 값은 0 입니다.'
else
echo 'input 값은 0 이 아닙니다.'
fi
위와 같이 작성하고 다음과 같이 실행시키면 됩니다..
./number_compare.sh [숫자]
'OS > 리눅스 & 유닉스' 카테고리의 다른 글
grep, egrep, fgrep & 정규식 (0) | 2012.02.13 |
---|---|
shell 조건문 (0) | 2012.02.11 |
chmod suid (0) | 2012.02.11 |
egrep 정규식 (0) | 2012.02.11 |
The GNU C Library Reference Manual (0) | 2012.02.10 |