Что означают exit 0, exit 1 и exit 2 в скрипте bash?

Я делаю несколько практических упражнений.

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

Я принял решение:

# Test for number of argumentif [ "$#" -eq 0 ] ; then  echo -e "No argument."  echo -e "Write a number between 1 and 12."  exit 1elif [ "$#" -gt 1 ] ;then  echo -e "More than 1 argument."  echo -e "Write a number between 1 and 12."  exit 1else  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.";;  esacfiexit 2exit 0

Что exit 1, exit 0 и exit 2 имею в виду, и почему мы их используем?

Вот один хороший ссылка на коды выхода из оболочки:

Exit code 0        SuccessExit code 1        General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operationsExit 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$ cpcp: missing file operandTry 'cp --help' for more information.$ echo $?1

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

exit 2exit 0

Это в некотором роде бессмысленно, так как вы никогда не сможете достичь exit 0 часть.

Все само по себе, exit подразумевает значение выхода, равное нулю, или успешное завершение вашего скрипта. Вам не нужно добавлять нулевой аргумент в команду выхода, чтобы указать на успешное завершение. Ваш сценарий может (или, вероятно, завершится) успешно, хотя он проверяет наличие ошибочного условия. В этом случае вы специально хотите, чтобы он завершался с условием ошибки (или 1).

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

То exit команда в последней строке вообще не обязательно должна быть там. Он может быть вызван с нулем или вообще не вызываться. Без указания аргумента 1 для команды exit ответ во всех этих случаях на echo $? было бы равно нулю.

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

  1. Вы приняли ответ правильно после публикации вопроса. Дайте ему 24 часа, чтобы дождаться еще лучших ответов. 2) Принятый ответ неверен и вводит в заблуждение. Правильный ответ: “Для кодов выхода нет значения по умолчанию (за пределами 0 = успех); вы, как разработчик скрипта, определяете семантику”. 3) Если вы создали этот сценарий, почему вы добавили команды выхода (все из которых логически излишни или могут свернуться до “выхода 1”, поскольку вы все равно используете if-else).

A successfully executed code should exit with code 0. Other values indicate an error. See for instance Exit Codes With Special Meanings

Если это тот код, который вы написали, то почему вы использовали инструкции, которые даже не понимаете?

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