Значение выхода 0, выйдите 1 и выйдите 2 в сценарии удара

Я делаю некоторые упражнения практики.

Запишите сценарий, которому дадут число месяца как аргумент и переведет это число на имя месяца. Результат будет распечатан к stdout.

Я сделал решение:

#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 0 и exit 2 средний, и почему мы используем их?

49
задан 14 March 2017 в 03:18

3 ответа

Вот одна польза ссылка для кодов выхода оболочки :

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

Протест: Используя надлежащий код выхода не требование и не осуществляется оболочкой. Разработчики могут проигнорировать руководство, если они думают это мудрый.

58
ответ дан 22 November 2019 в 23:53

Используя exit и число удобный способ сигнализировать о результате Вашего сценария. Это подражает пути, которые колотят команды, производит код возврата. С ударом управляет, чтобы код возврата 0 обычно означал, что все выполнилось успешно без ошибок. exit также заставляет Ваш сценарий остановить выполнение в той точке и возвратиться к командной строке.

Любой код возврата, больше, чем 0, указывает на какую-то ошибку, хотя иногда ошибка не очень важна, для каждой команды должно быть возможно найти некоторую документацию, которая говорит Вам, что означает каждый код возврата.

можно получить код возврата последней команды удара при помощи переменной оболочки $? как так:

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

при использовании этого в сценарии можно запросить код возврата таким же образом, когда он сделал выполнение. Таким образом, Вы будете видеть что наличие:

exit 2
exit 0

вид бессмысленных, поскольку Вы никогда не можете достигать exit 0 часть.

23
ответ дан 22 November 2019 в 23:53

Совершенно отдельно, exit подразумевает значение выхода нуля или успешное завершение Вашего сценария. Вы не должны добавлять нулевой аргумент команде выхода для указания на успешное завершение. Ваш сценарий может (или вероятно будет), выход успешно, хотя он тестирует на ошибочное условие. В этом случае Вы конкретно хотите, чтобы это вышло с ошибкой (или 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 команда в последней строке не должна быть там вообще. Это можно было назвать с нулем или не зайти все. Не указывая 1 аргумент команде выхода ответ во всех этих случаях к эти echo $? был бы нулем.

Однако путем определения 1 аргумента команде выхода ответ на эти echo $? был бы 1. Так используйте 1 аргумент команде выхода, когда Вы хотите указать, что сценарий вышел с состоянием ошибки.

3
ответ дан 22 November 2019 в 23:53

Другие вопросы по тегам:

Похожие вопросы: