bash 스크립트에서 종료 0, 종료 1 및 종료 2의 의미


49

연습 연습을하고 있어요.

인수로 월 번호가 부여되고이 번호를 월 이름으로 변환하는 스크립트를 작성하십시오. 결과가 표준 출력으로 인쇄됩니다.

나는 해결책을 만들었다 :

#test for number of argument

if [ "$#" -eq 0 ] ; 
then
   echo -e "No argument."
   echo -e "Write a number between 1 and 12."
   exit 1
elif [ "$#" -gt 1 ] ;
then
   echo -e "More than 1 argument."
   echo -e "Write a number between 1 and 12."
   exit 1
else

   numb=$1
   case "$numb" in
      1) echo "Month: January";;
      2) echo "Month: February";;
      3) echo "Month: March";;
      4) echo "Month: April";;
      5) echo "Month: May";;
      6) echo "Month: June";;
      7) echo "Month: July";;
      8) echo "Month: August";;
      9) echo "Month: September";;
     10) echo "Month: October";;
     11) echo "Month: November";;
     12) echo "Month: December";;
      *) echo -e "You wrote a wrong number. Try again with writing number between 1 and 12.";;

   esac
fi
exit 2
exit 0

무엇 exit 1, exit 0exit 2의미하고 왜 사용합니까?


5
성공적으로 실행 된 코드는 코드 0으로 종료해야합니다. 다른 값은 오류를 나타냅니다. 예를 들어 특별한 의미를 가진 종료 코드
V. Olsen

2
bash 스크립트는 영화관과 같으며 존재하는 것이 다릅니다. 종료 명령문은 bash 인터프리터의 종료 위치를 표시합니다. 스크립트가 실행되면 가장 가까운 종료까지 통역사가 실행되어야합니다.
DepressedDaniel

5
이것이 당신이 작성한 코드라면, 당신이 이해하지 못하는 진술을 어떻게 사용 했습니까?
Dmitry Grigoryev

5
1) 질문을 게시 한 직후 답변을 수락 했습니다 . 더 나은 답변을 기다리는 데 24 시간이 걸립니다. 2) 허용 된 답변이 잘못되어 오도됩니다. 정답은 "종료 코드에는 기본 의미가 없으며 (0 이상 성공) 스크립트 개발자는 의미를 정의합니다." 3) 해당 스크립트를 작성했다면 exit 명령을 추가 한 이유는 무엇입니까?
AnoE

답변:


58

쉘 종료 코드에 대한 하나의 좋은 참조가 있습니다 .

Exit code 0        Success
Exit code 1        General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operations
Exit code 2        Misuse of shell builtins (according to Bash documentation)        Example: empty_function() {}

주의 사항 : 올바른 종료 코드를 사용하는 것은 필수 사항이 아니며 셸에서 적용하지 않습니다. 개발자가 현명하다고 생각하면 지침을 무시할 수 있습니다.


8
그래도 조심하십시오. 종료 코드의 의미는 전적으로 프로그램 개발자에게 달려 있습니다.
muru

또한 링크 된 소스 인 Advanced Bash 스크립팅 안내서는 " 예약 된 종료 코드"(원본에서 강조)를 표시한다고 주장하지만 해당 주장은 인용되지 않고 완전히 거짓 입니다.
Eliah Kagan

23

exit및 숫자를 사용하면 스크립트 결과를 쉽게 알 수 있습니다. bash 명령이 리턴 코드를 출력하는 방식을 모방합니다. bash 명령으로 리턴 코드 0은 일반적으로 모든 것이 오류없이 성공적으로 실행되었음을 의미합니다. exit또한 해당 시점에서 스크립트 실행을 중지하고 명령 행으로 돌아갑니다.

0보다 큰 리턴 코드는 일종의 오류를 나타내지 만 때로는 오류가 중요하지는 않지만 각 명령에 대해 각 리턴 코드의 의미를 알려주는 문서를 찾을 수 있습니다.

다음 $?과 같이 쉘 변수를 사용하여 마지막 bash 명령의 리턴 코드를 얻을 수 있습니다 .

$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1

스크립트에서 이것을 사용하면 실행이 완료되었을 때와 같은 방식으로 리턴 코드를 쿼리 할 수 ​​있습니다. 그래서 당신은 그것을 볼 수 있습니다 :

exit 2
exit 0

당신은 결코 그 exit 0부분에 도달 할 수 없기 때문에 의미가 없습니다 .


3

그 자체만으로 exit종료 값이 0이거나 스크립트가 성공적으로 완료되었음을 나타냅니다. 성공적인 완료를 나타 내기 위해 exit 명령에 0 인수를 추가하지 않아도됩니다. 잘못된 조건을 테스트하더라도 스크립트가 성공적으로 종료 될 수 있습니다. 이 경우 특히 오류 (또는 1) 조건으로 종료하려고합니다.

echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in 
    1) echo "one";;
    2) echo "two";;
    3) echo "three";;
    4) echo "four";;
    *) echo "invalid answer"
       exit 1;;
esac

exit마지막 줄 의 명령이 전혀 없어도됩니다. 0으로 호출되거나 전혀 호출되지 않을 수 있습니다. exit 명령에 1 인수를 지정하지 않으면이 모든 경우에 대한 답은 echo $?0이됩니다.

그러나 exit 명령에 1 인수를 지정하면 응답 echo $?이 1이됩니다. 따라서 스크립트가 오류 조건으로 종료되도록 지정하려면 exit 명령에 1 인수를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.