[강좌][shell] test 구문에 대하여

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

                 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 조건문으로

사용되어 지니 반드시 익혀 두길 바란다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 22일

    1inextricable

  2. 2023년 1월 27일

    1greener

페이스북/트위트/구글 계정으로 댓글 가능합니다.