Shell

[bash 쉘 스크립트] 종료(exit)

필유아사 2022. 1. 15. 23:56

개요

 

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

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

 

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

 

일반적으로 명령어의 종료 상태가 0이면 성공(success)이고 이외의 코드는 오류이며 0보다 큰 오류 코드를 반환합니다.

 

 

종료 (exit)

 

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

#!/bin/bash

echo "hello"
exit 100

 

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

이 때 종료 상태로 사용할 수 있는 값의 범위는 0 부터 255 까지입니다. 만일 exit 코드를 256이라고 지정하면 0 이 리턴됩니다. 한바퀴 돌아서 256으로 나눈 나머지 값을 리턴하게 됩니다. 원치 않는 결과가 나올수 있으니 exit 코드를 지정할려면 반드시 0과 255 사이값이 지정해야 합니다.

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

 

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

 

 

종료 상태 (exit status)

 

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

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

 

$ sh test.sh
hello

$ echo $?
100

 

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

 

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

$ bacde
-bash: eeee: command not found
$ echo $?
127

 

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

$ echo "hello"
hello
$ echo $?
0

 

출처: https://gracefulprograming.tistory.com/70 [Peter의 우아한 프로그래밍]