프로그래밍/Bash

[bash 쉘 스크립트] 종료(exit)와 종료 상태 (exit status)

Peter Ahn 2019. 10. 30. 18:12
반응형

 

개요

 

안녕하세요 피터입니다.

오늘은 Bash 쉘에서 프로그램을 종료(exit) 하는 방법과 종료 상태(exit status)를 얻는 방법에 대해 설명드리겠습니다.

종료 상태는 리턴값(return value, return status)이라고 부르기도 하는데 이전에 수행했던 명령어나 프로그램이 종료 될 때 넘겨주는 값을 의미하기도 해서 그렇습니다.

 

종료 상태 또는 반환값이 중요한 이유는 쉘 스크립트를 작성하는데 있어서 특정 명령어의 성공 여부에 따라 분기해야 하는 경우 이전 명령어가 정상적으로 수행되었는지 아는 것이 필수적이기 때문입니다.

 

쉘 스크립트 내에서 exit 명령어가 실행되면 스크립트가 종료되며 부모 프로세스에 종료 상태를 전달할 수 있는데 이 값은 프로그램 내에서 임의로 지정할 수도 있습니다. 

 

이렇게 전달되는 하위 프로세스의 종료 상태는 스크립트를 자동화하는데 있어서 매우 중요한 기준을 제공합니다. 

(일반적으로 명령어의 종료 상태가 0이면 성공(success)로 판단하며 오류가 있는 경우 오류 코드를 반환하게 됩니다)

 

 

종료 (exit)

 

exit 명령어는 매개변수로 주어진 값을 리턴합니다. 

#!/bin/bash

echo "hello"

exit 100

 

예를들면 위와 같이 exit 100 이라고 작성하면 스크립트를 종료하면서 100 이라는 값을 리턴하는 것이죠.

이 때 종료 상태로 사용할 수 있는 값의 범위는 0 부터 255 까지입니다. 

일반적으로 unix 관행을 잘 따르는 경우 0은 성공, 1 ~ 255 는 오류 코드(error code)로 인식되고 있습니다. 

 

만일 exit 를 매개변수 없이 사용하게 되면 exit 가 실행되기 이전에 가장 마지막으로 수행됐던 명령어의 종료 상태를 반환하게 됩니다.

 

 

종료 상태 (exit status)

 

$? 는 가장 최근 명령어의 종료 상태를 나타냅니다. 

위 스크립트가 100을 반환한다고 했는데 정말 그런지 실행 후 종료 상태를 출력해보겠습니다.

 

[root@peterdev sh]# cat test.sh
#!/bin/bash

echo "hello"

exit 100
[root@peterdev sh]# sh test.sh
hello
[root@peterdev sh]# echo $?
100

 

위와 같이 echo $? 명령어에서 100이 출력되는 것을 확인할 수 있습니다.

 

만일 잘못된 명령어를 입력하여 오류가 발생한 경우는 아래와 같이 오류코드가 반환되는 것을 확인할 수 있습니다.

[root@peterdev sh]# eeee
-bash: eeee: command not found
[root@peterdev sh]# echo $?
127

 

아래 스크립트에서는 echo "hello" 가 정상적으로 수행되었기 때문에 0이 반환된 것을 확인할 수 있습니다.

[root@peterdev sh]# echo "hello"
hello
[root@peterdev sh]# echo $?
0

 

 

-Peter의 우아한 프로그래밍

여러분의 공감과 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 남겨주시면 감사하겠습니다.

 

 

반응형