Posted on 2004/07/05 12:02
Filed Under 프로그래밍/쉘프로그램 조회수:

======================================================================

                 SHELL PROGRAMMING [3] Test 조건문  

본 강좌는 본인의 허락없이 무단 복사하거나 타 사이트에 등록하는것을
금지 합니다.  -  서진우(alang at sysmng.com)

======================================================================


3.1 test 문

test 문은 쉽게 말해서 조건문이라고 보면 된다.

[ expressions ]

expressions 사이나 [ 뒤와, ] 앞에는 꼭 space 를 넣어야 한다.
[ 와 ] 사이에 들어오는 조건을 나타내는 문이 test 문이라고 보면
된다. test 문은 크게 "수치 test", "파일 test", "String test"
3개로 나눌수 있다.  

3.1.1 수치 Test

수치 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보다 작거나 같은 경우
------------------------------------------------

-eq -ne -gt -lt -ge -le 는 모두 숫작의 크기를 비교할수 있고
소숫점 이하의 숫자는 무시한다.

예제 ------------------------------------------

#!/bin/sh

A=1
B=2

if [ $A -eq $B ]
then
    echo "A is equal to B"
elif [ $A -gt $B ]
then
    echo "A is greater than B"
elif [ $A -lt $B ]
then
    echo "A is less than B"
fi

-----------------------------------------------

결과

A is less than B

3.1.2 파일 Test

파일의 존재 유무 및 읽기,쓰기 가능 여부를 Test 하기 위한것이다.

표현 방식            참이 되는 경우
---------------------------------------------------------
[ -s filename ]     file 이 존재하면서 0 보다 큰 경우
[ -f filename ]     directory 가 아닌 file 인 경우(크기가 0인것도 포함)
[ -d directory_name ]   file 이 아닌 directory 인 경우
[ -w filename ]     쓰기 가능한 경우
[ -r filename ]     읽기 가능한 경우
[ ! -option filename ]  option의 조건이 거짓일때
---------------------------------------------------------

예제 ------------------------------------------

#!/bin/sh

if [ -f test ]
then
    if [ -s test ]
    then
    du -h test
    fi
fi

-----------------------------------------------

위의 예제는 먼저 이 스크립터가 있는 디렉토리 안에 test 란 파일이
존재 하는지와 크기가 0 byte 이상인지를 확인하고 0 byte 이상이면
이 파일의 크기를 du -h 로 알아보는 스크립터다. 결과는 다음과 같다.

4.0k    test

3.1.3 String Test

String Test 는 문자 혹은 문자열을 비교할때 사용되는걸로 문자열 좌우
에는 꼭 " 를 사용하도록 한다는 것을 잊어서는 안된다.
이는 단순 문자 비교일때는 몰라도 space 가 포함된 문자열이나 문자열의
내용이 아무것도 없는 경우에 문제가 발생하기 때문이다. 그러므로 String
Test 를 할때는 " 를 이용하는 습관을 들이도록 하자.

          표현 방식            참이 되는 경우
---------------------------------------------------------
[ "String1" = "String2" ]   두 문자열이 같은 경우
[ "String1" != "String2" ]  두 문자열이 다른 경우
[ -z "String" ]             문자열의 길이가 0인 경우
[ -n "String" ]             문자열의 길이가 0이 아닌 경우
---------------------------------------------------------

예제 ------------------------------------------

#!/bin/sh

echo -n "password :"
read PASS

if [ "$PASS" = "xxxxxxx" ]
then
echo "어서 오세요.!! 관리자님"

else
echo "관리자 인증 실패 하였습니다."
exit 0
fi

-----------------------------------------------

위 예제는 read 값에 입력되는 값이 xxxxxx 와 동일하면 인증에
성공한것이고 그렇지 않은 경우는 인증 실패로 스크립터에서 나오게 된다.

참고 : read 는 키보드로 부터 값을 읽어 들여 변수에 저장한다.
위의 예제로 보면 read 로 인해 쉘프로그램 실행시 입력대기 모드로 들어
가고 여기에 입력되는 키워드가 PASS 의 변수값으로 저장된다.
    
3.1.4 기타 Test
    
-a : and 관계 연산자
-o : or 관계 연산자

예제 ------------------------------------------

#!/bin/sh

A=1
B=1
C=2
D=3

if [ \\( "$A" = "$B" \\) -a \\( "$C" != "$D" \\) ]
then
    E=${A}${B}${C}${D}
fi

echo $E

-----------------------------------------------

위 예제는 A 와 B 가 같고 C 와 D 가 다를때 변수 E 값을 출력한다.

이제 Test 구문에 대해서 감~ 잡았으리라 생각 된다.
Test 구문에 다음에 진행할 if,while,util 문에서 사용되어 test 조건문으로
사용되어 지니 반드시 익혀 두길 바란다.


* 서진우님에 의해서 게시물 복사되었습니다 (2004-10-07 16:03)
Writer profile
author image
-아랑 -

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우

Counter

· Total
: 4610712
· Today
: 180
· Yesterday
: 757