강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

쉘프로그래밍강좌041 : 쉘프로그램내에서 사용되는 test명령어의 활용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

쉘프로그래밍강좌041 : 쉘프로그램내에서 사용되는 test명령어의 활용법

 

 

 

test명령어는 let명령어와 마찬가지로 쉘프로그램내에서 주로 사용되는 명령어로서 주어진 조건식을 평가(수행)하여 평가의 결과에 따라서 조건분기 등을 하기 위한 목적으로 사용됩니다.

 

 

 

 , 평가의 결과가 참일 경우에는 종료값(exit status)으로 0을 반환하고 참이 아닐 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

또한 test명령어는 쉘프로그램내에서 []으로 표현되어 사용됩니다.

 

 

 

 []사용시 주의하실 것은 “[“ 다음과 “]” 앞에는 반드시 공백이 주어져야 한다는 점입니다.

 

 

 

 

 

명령어위치 : /usr/bin/test

 

 

 

다음은 test문의 사용유형에 따른 여러 가지 사용예입니다.

 

 

 

 실제 쉘프로그램에서 필수적으로 가장 많이 사용되는 문장이 test문장입니다.

 

 

 

 실제로 쉘프로그램을 한번 이상 코딩해 보신 분이라면 잘 아시겠지만 쉘프로그램내에서 test명령문은 거의 대부분의 경우 if문과 함께 사용됩니다.

 

 

 

  , if문과 함께 사용되어 주어진 조건에 따라서 프로그램의 흐름을 분기하기 위한 목적으로 사용됩니다.

 

 

 

 

 

아래의 사용형식과 의미를 익혀서 쉘프로그램 실무에 참고하시기 바랍니다.

 

 

 

 

 

 

[ 문자열1 = 문자열2 ]

 

 

 

문자열1과 문자열2가 같은가를 평가하여 같으면() 0값을 종료값(exit status)으로 반환하고 같지 않으면(거짓) 0이 아닌 값(1)을 반환합니다.

 

 

 

 실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 1

 

 

 

[ 문자열1 != 문자열2 ]

 

 

 

문자열1과 문자열2가 같지않은가를 평가하여 같지않으면() 0값을 종료값(exit status)으로 반환하고 같으면(거짓) 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ 문자열 ]

 

 

문자열이 NULL이 아닌가를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -z 문자열 ]

 

 

문자열의 길이가 0인가를 평가하여 문자열의 길이가 0이면 0()을 종료값(exit status)으로 반환하고 문자열의 길이가 0이 아니면(거짓) 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -n 문자열 ]

 

 

문자열의 길이가 0이 아닌가를 평가하여 문자열의 길이가 0이 아니면 0()을 종료값(exit status)으로 반환하고 문자열의 길이가 0이면 (거짓) 0이 아닌 값(1)을 반환합니다.

 

 

 

 실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

card="card 0 $VENDOR_ID"

dev="dev 0 $DEVICE_ID"

[ -n "$io" ]  && port0="port 0 $io"

[ -n "$io1" ] && port1="port 1 $io1"

[ -n "$io2" ] && port2="port 2 $io2"

[ -n "$irq" ] && irq="irq 0 $irq"

[ -n "$mem" ] && memory="memory 0 $mem"

 

 

 

[ -l 문자열 ]

 

문자열의 길이(몇 문자인가)를 평가합니다.

 

 

 

 

 

[ 문자열1 -a 문자열2 ]

 

 

문자열1과 문자열2가 모두(AND) 참인가를 평가하여 모두 참이면 0값을 종료값(exit status)으로 반환하고 둘 중 하나라도 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ 문자열1 -o 문자열2 ]

 

 

문자열1과 문자열2중 둘 중 하나라도(OR) 참이면 0값을 종료값(exit status)으로 반환하고 모두 거짓일 경우에만 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ ! 표현식 ]

 

 

표현식이 거짓이면 0값을 종료값(exit status)으로 반환하고 참이면 0이 아닌 값(1)을 반환합니다.

 

 

 

(NOT)

 

[[ 패턴1 && 패턴2 ]]

 

 

패턴1과 패턴2가 모두 참인가를 평가하여 모두(AND) 참이면 0값을 종료값(exit status)으로 반환하고 둘 중 하나라도 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[[ 패턴1 || 패턴2 ]]

 

 

패턴1과 패턴2 둘 중 하나이상이 참인가를 평가하여 하나이상이 참이면(OR) 0값을 종료값(exit status)으로 반환하고 둘 모두 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[[ ! 패턴 ]]

 

 

패턴과 일치하지 않는가를 평가하여 일치하지 않으면 0값을 종료값(exit status)으로 반환하고 일치하면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ A -eq B ]

 

 

A B와 같은가(equal)를 평가하여 같으면 0값을 종료값(exit status)으로 반환하고 같지않으면  0이 아닌 값(1)을 반환합니다.

 

 

 

 실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

for i in $CONFS; do

       site=`basename $i .conf`

       echo -n $"Starting $prog for $site: "

       daemon /usr/sbin/vsftpd $i

       RETVAL=$?

       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

       echo

done

 

 

[ A -ne B ]

 

 

A B와 같지 않은가(not equal)를 평가하여 같지않으면 0값을 종료값(exit status)으로 반환하고 같으면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ A -gt B ]

 

 

A B보다 큰가(greater than)를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ A -ge B ]

 

 

A B보다 크거나 같은가(greater equal)를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ A -lt B ]

 

 

A B보다 작은가(less than)를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ A -le B ]

 

 

A B보다 작거나 같은가(less equal)를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ 파일1 -nt 파일2 ]

 

 

파일1이 파일2보다 최근 파일인가를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ 파일1 -ot 파일2 ]

 

 

파일1이 파일2보다 오래된 파일인가를 평가하여 참이면 0값을 종료값(exit status)으로 반환하고 참이 아니면 0이 아닌 값(1)을 반환합니다.

 

 

 

 

 

[ 파일1 -ef 파일2 ]

 

 

파일1과 파일2가 같은 장치 또는 같은 inode값을 가지는가를 평가합니다.

 

 

 

 

 

 

[ -b 파일 ]

 

 

주어진 파일이 존재하며 블록(block) 특수파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -c 파일 ]

 

 

주어진 파일이 존재하며 문자(character) 특수파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -d 파일 ]

 

 

주어진 파일이 존재하며 디렉토리(directory)이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

if [ -d /etc/vsftpd ] ; then

                CONFS=`ls /etc/vsftpd/*.conf 2>/dev/null`

                [ -z $CONFS ] && exit 6

                for i in $CONFS; do

                        site=`basename $i .conf`

                        echo -n $"Starting $prog for $site: "

                        daemon /usr/sbin/vsftpd $i

                        RETVAL=$?

                        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

                        echo

                done

else

 

 

 

[ -e 파일 ]

 

 

 

주어진 파일이 존재(exist)하면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -f 파일 ]

 

 

주어진 파일이 존재하고 일반파일(regular file)이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

 

if [ -f /var/lock/subsys/$prog ]; then

            stop

            start

            RETVAL=$?

fi

 

 

[ -u 파일 ]

 

 

주어진 파일이 존재하며 SetUID가 설정된 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -g 파일 ]

 

 

주어진 파일이 존재하며 SetGID가 설정된 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -k 파일 ]

 

 

주어진 파일이 존재하며 Sticky비트가 설정된 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -L파일 ]

 

 

주어진 파일이 존재하며 심볼릭링크파일(symbolic link file)이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -p 파일 ]

 

 

주어진 파일이 존재하며 named pipe이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -r 파일 ]

 

 

주어진 파일이 존재하며 읽기 가능한(readable) 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -w 파일 ]

 

 

 

주어진 파일이 존재하며 쓰기가능한(writable) 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -x 파일 ]

 

 

 

주어진 파일이 존재하며 실행가능한(executable) 파일이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 실제 예를 보시면 다음과 같습니다.

 

 

 

 

 

[ -x /usr/sbin/vsftpd ] || exit 1

 

 

 

[ -s 파일 ]

 

 

주어진 파일이 존재하며 파일크기가 0보다 크다면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -S 파일 ]

 

 

주어진 파일이 존재하며 소켓(socket)파일( : /tmp/mysql.sock)이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -t FD ]

 

 

주어진 파일기술자(FD : file descriptor)가 열린 상태이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -O 파일 ]

 

 

주어진 파일이 존재하며 유효사용자(effective user ID)의 소유이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

[ -G 파일 ]

 

 

주어진 파일이 존재하며 유효그룹(effective group ID)의 소유이면 결과가 참이 되어 0값을 종료값으로 반환합니다.

 

 

 

 그렇지 않은 경우에는 0아닌 값(1)을 반환합니다.

 

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,040 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  182 명