티스토리 뷰

728x90
반응형

 

Shell Script에서 제공하는 옵션을 활용하여 Debugging 하기

# 테스트 시나리오 및 옵션 확인

OS : UNIX
Description
Shell 자체에서 Debug할 수 있는 기능을 제공하고 있다. -nvx등의 옵션을 이용해서 Shell Script를 실행하면 된다. 각 옵션에 대해서 살펴보자.
-n : Script의 각 command를 해석만 한다. command 실행은 하지 않기 때문에 실행시에만 검출되는 에러는 발견할 수 없다.(if 문 다음에 fi문을 기술하지 않은 경우 등…) 또한 실행하지 않으므로 arguments를 전달할 필요 없다.
-v : Script의 각 행을 파일명의 생성, 변수의 전개등을 하기 전에 표시한다. n또는 x와 조합해서 사용하여 에러가 발생한 행을 알기 쉽게한다.
-x : Script의 각 행을 파일명의 생성, 변수의 전개등을 하고 나서 표시하고 실행한다. Script의 실행시에 변수값 등이 어떻게 변화되는가를 추적할 수 있다.


# 사용 예시

1) shellDebugging.sh 실행 시 -n 옵션을 추가한 경우 (1/2)

- Shell Script 확인


[nrson@nrson shellTest]$ cat shellDebugging.sh
#! /usr/bin/ksh
while [ 1 ]
do
    cat
       …아래 Menu를 선택하세요…
EOF
    read input
    echo “read is $input”
       if [ "$input" != "q" ] && [ "$input" != "Q"  ; #then # ==> ]가 빠져 있음. then 빠져 있음.
        break
    fi
#done                      # ==> done 빠져 있음
[nrson@nrson shellTest]$


- 결과 확인


[nrson@nrson shellTest]$ ksh -n shellDebugging.sh
shellDebugging.sh: line 11: syntax error near unexpected token `fi'
shellDebugging.sh: line 11: `    fi '
[nrson@nrson shellTest]$


-n옵션에서는 if 문 뒤에 ]가 빠진 경우는 확인하지 못하고 있다.
if, then, fi의 then이 빠진 경우와 같이 기본적인 문법구조를 틀린 경우는 –n 옵션으로 확인 가능하다.
if 문에서 오류 확인후 바로 종료되었다. while, do, done의 done이 빠진 경우는 if문의 오류를 수정한 후 다시 실행해야 하는 번거로움이 있다.

2) shellDebugging.sh 실행 시 -n 옵션을 추가한 경우 (2/2)

if, then, fi의 then이 빠진 경우를 수정한 후 –n옵션으로 다시 실행하였다.


[nrson@nrson shellTest]$ cat shellDebugging.sh 

shellDebugging.sh [11]: syntax error at line 4 : `do’ unmatched

[nrson@nrson shellTest]$ 


while, do, done의 done이 빠진 경우를 –n 옵션으로 확인하였다.
while, do, done의 done이 빠진 경우를 수정하고 –n 옵션으로 다시 실행하였지만, 아무 문제를 발견할 수 없었다. if문의 조건절은 test 문으로 실행해봐야 알 수 있기 때문에 –n 옵션으로는 확인할 수 없다.
- 결과 확인


[nrson@nrson shellTest]$ ksh -n shellDebugging.sh 
+ [ 1 ]
+ cat
+ 0< /tmp/sh27092.1
       …아래 Menu를 선택하세요…
+ read input
a
+ echo read is a
read is a
+ [ a != q ]
+ [ a != Q
shellDebugging.sh [12]: test: ] missing
+ [ 1 ]
+ cat
+ 0< /tmp/sh27092.1
       …아래 Menu를 선택하세요…
+ read input
q
+ echo read is q
read is q
+ [ q != q ]
+ [ 1 ]
+ cat
+ 0< /tmp/sh27092.1
       …아래 Menu를 선택하세요…
+ read input
Q
+ echo read is Q
read is Q
+ [ Q != q ]
+ [ Q != Q
shellDebugging.sh [12]: test: ] missing
+ [ 1 ]
+ cat
+ 0< /tmp/sh27092.1
        …아래 Menu를 선택하세요…
+ read input


-x 옵션은 Script의 각 행을 파일명 생성, 변수의 전개 등을 한후 실제로 실행한다. 때문에 –n 옵션으로 확인하지 못했던 부분도 모두 확인할 수 있다. 실행 결과 if문에서 “]”가 빠짐으로 인해 test 문이 정상실행되지 못하고, 그로 인해 input 값을 제대로 검증하고 못해서 break 하지 못하고 계속해서 반복수행하고 있다.

728x90
반응형