Я делаю несколько упражнений.
Напишите скрипт, которому в качестве аргумента будет присвоен номер месяца, и он будет переведен в название месяца. Результат будет распечатан на стандартный вывод.
Я сделал решение:
#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
значит, и почему мы используем их?
Ответы:
Вот одна хорошая ссылка для кодов выхода оболочки :
Предостережение: использование правильного кода выхода не является обязательным требованием и не обеспечивается оболочкой. Разработчики могут игнорировать руководство, если они считают это мудрым.
источник
Использование
exit
и числа - удобный способ сообщить о результатах вашего сценария. Это имитирует способ, которым команды bash выводят код возврата. С командами bash код возврата 0 обычно означает, что все выполнено успешно без ошибок.exit
также заставляет ваш скрипт остановить выполнение в этой точке и вернуться в командную строку.Любой код возврата, больший 0, указывает на какую-то ошибку, хотя иногда эта ошибка не критична, для каждой команды должна быть возможность найти некоторую документацию, которая скажет вам, что означает каждый код возврата.
Вы можете получить код возврата последней команды bash, используя переменную оболочки
$?
следующим образом:Когда вы используете это в скрипте, вы можете запросить код возврата таким же образом, когда он будет выполнен. Итак, вы увидите, что имея:
В некотором смысле бессмысленно, так как вы никогда не сможете достичь роли
exit 0
.источник
Само по себе
exit
подразумевает выходное значение ноль или успешное завершение вашего скрипта. Вам не нужно добавлять нулевой аргумент в команду выхода, чтобы указать успешное завершение. Ваш сценарий может (или, вероятно, будет) завершиться успешно, хотя он проверяет ошибочное состояние. В этом случае вы специально хотите, чтобы он завершился с ошибкой (или 1).Команда
exit
в последней строке не должна быть там вообще. Он может быть вызван с нуля или не вызываться вообще. Без указания аргумента 1 в команде выхода ответ во всех этих случаяхecho $?
будет нулевым.Однако, указав аргумент 1 для команды выхода, ответ на запрос
echo $?
будет равен 1. Поэтому используйте аргумент 1 для команды выхода, если вы хотите указать, что скрипт завершился с ошибкой.источник