Skip to content

1. 종료와 종료 상태(Exit and Exit Status)


exit 명령어는 C 프로그램에서처럼 스크립트를 끝낼 때 사용한다. 또한, 스크립트의 부모 프로세스에게 어떤 값을 돌려 줄 수도 있다.


모든 명령어는 종료 상태를 리턴한다. 명령어가 성공 시에는 0을 리턴하고 실패 시에는 에러 코드로 해석될 수 있는 non-zero를 리턴한다. 예외가 있기는 하지만, 유닉스 관례를 잘 따르는 명령어, 프로그램, 유틸리티는 성공했을 때 0을 리턴한다.


비슷하게, 스크립트의 함수나 스크립트 자신도 종료 상태를 리턴한다. 스크립트 함수나 스크립트에서 가장 마지막에 실행된 명령어가 종료 상태를 결정한다. 스크립트에서 exit nnn이라고 하면 nnn이라는 종료 상태를 셸에게 전달해 준다. 이때 nnn0에서 255 사이의 십진수여야 한다.


Note

매개변수 없이 그냥 exit으로 끝났을 경우에는, 마지막에 실행된 명령어의 종료 상태가 스크립트의 종료 상태가 된다.


$?는 제일 마지막 명령어의 종료 상태를 보여준다. 함수가 리턴한 다음에 $?라고 하면 함수의 마지막 명령어의 종료 상태를 알려준다. BASH에서는 이렇게 해서 함수의 반환값을 돌려 준다. 스크립트가 종료한 다음에는 명령어줄에서 $?로 스크립트 마지막 명령어의 종료 상태를 알 수가 있는데 관습적으로 0은 성공을 나타내고 1에서 255까지의 숫자는 에러를 나타낸다.


예제) 종료/종료 상태
#!/bin/bash

echo hello
# hello
# 명령어가 성공했기 때문에 종료 상태 0이 리턴됨
echo $?
# 0

# 알 수 없는 명령어
lskdf
# 0이 아닌 종료 상태가 리턴됨
echo $?
# 127

# 셸에게 113을 리턴함
exit 113
# 확인해 보려면 이 스크립트가 종료된 다음에 "echo $?"라고 쳐 봄

# 관습적으로 'exit 0'은 성공을 의미함
# 0이 아닌 값은 에러나 예외상황을 나타냄


$?는 스크립트에서 실행시킨 명령어의 결과를 확인하는 데 특별히 유용하게 쓰인다.


Note

논리적 부정 한정어인 !는 테스트나 명령어의 결과를 반대로 바꿔서 종료 상태에 영향을 미친다.


예제) !으로 조건을 부정하기
#!/bin/bash

# 셸 내장명령어인 "true"
true
echo "\"true\"의 종료 상태 = $?"
# "true"의 종료 상태 = 0

# 주의할 점은 "!"을 쓸 때, 빈 칸이 있어야 된다는 것
# 그냥 !true라고 쓰면 "command not found" 에러가 남
! true
echo "\"! true\"의 종료 상태 = $?"
# "! true"의 종료 상태 = 1

exit 0

References