Linux/Shell Script

[Shell Script] Exit Status - 1

비번변경 2022. 7. 5. 19:03

Exit Status

종료 상태 값은 명령이 정상적으로 실행을 완료했는지 아니면 오류가 발생했는지 판단할 수 있도록 한다.

Shell에서 실행되는 모든 명령은 종료 상태 값을 반환하며 if, while, until, &&, ||은 종료 상태 값을 이용해서 참, 거짓을 판단한다.

명령이 정상적으로 종료된 경우, 0을 반환하고 그 이외의 값은 오류를 분류하는 용도로 사용된다.

명령의 종료 상태 값은 $? 변수로 알 수 있다.

$?

 

 

앞선 명령이 정상 종료되어야 할 경우

앞서 실행된 명령에 오류가 발생했을 때 뒤의 명령이 실행되면 안 되는 경우, && 연산자를 이용해 명령을 연결하거나 test 명령을 이용하여 종료 상태를 확인한다.

# &&
command1 ... && command2



# test
command1 ....

if test $? != 0; then
    echo command failed
    exit 1
fi

 

 

종료 상태 값 지정

스크립트 파일, subshell은 프로세스가 새로 생성되므로 exit 명령을 사용하여 종료 상태 값을 지정한다.

function, source 명령으로 읽어 들이는 경우 return 명령으로 종료 상태 값을 지정한다.

종료 상태 값을 지정하지 않으면 마지막으로 실행된 명령의 종료 상태 값이 사용된다.

 

 

종료 코드

종료 코드의 의미는 아래와 같다

코드 의미
0 정상 종료
1 일반적인 에러
2 Syntax Error, 잘못 사용된 builtin 명령

test.sh: line 6: syntax error near unexpected token 'fi'
exit: 3.14: numeric argument required
126 명령 실행 불가

bash: ./mylogfile.txt: Permission denied
127 명령, 파일이 존재하지 않음

asdfg: command not found
128 + N Signal N에 의한 종료

 

 

참, 거짓 판단에 복수개의 명령이 사용될 경우

참, 거짓의 판단에 사용되는 명령이 위치하는 자리에는 &&, ||, ;, | 또는 명령 그룹이 위치할 수 있다. 어떤 경우라도 마지막으로 실행되는 명령의 종료 상태 값이 참, 거짓의 판단에 사용된다.

until read -r line
    line=$(echo "$line" | tr -d '\r\n')
    test -z "$line" # 참, 거짓 판단에 사용된다.
do
    ...
done

 

 

참고 문서

https://mug896.github.io/bash-shell/exit_status.html