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

연습 연습을하고 있어요.

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

나는 해결책을 만들었다 :

#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의미하고 왜 사용합니까?



답변

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

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() {}

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


답변

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부분에 도달 할 수 없기 때문에 의미가 없습니다 .


답변

그 자체만으로 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 인수를 사용하십시오.