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

레벨248-1 : 쉘프로그램내에서 사용되는 test명령어의 활용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

레벨248-1 : 쉘프로그램내에서 사용되는 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,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  93 명