我正在做一些练习。
编写一个脚本,将月份数字作为参数,并将该数字转换为月份名称。结果将打印到标准输出。
我提出了一个解决方案:
# 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
意思?为什么我们使用它们?
答案1
这是一个很好的shell 退出代码参考:
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() {}
警告:使用正确的退出代码不是必需的,并且 shell 不会强制执行。如果开发人员认为明智,可以忽略该指导。
答案2
使用exit
和数字是指示脚本结果的便捷方式。它模仿 bash 命令输出返回代码的方式。对于 bash 命令,返回代码 0 通常表示所有操作均成功执行且无错误。exit
还会让您的脚本在该点停止执行并返回到命令行。
任何大于 0 的返回代码都表示某种错误,尽管有时错误并不严重,但对于每个命令,都应该能够找到一些文档来告诉您每个返回代码的含义。
您可以使用 shell 变量获取最后一个 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
就意味着退出值为零,或者脚本成功完成。您不必将零参数添加到 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
根本就不需要。可以使用零来调用它,或者根本不调用它。如果不为 exit 命令指定 1 个参数,则在所有这些情况下,答案都将为零echo $?
。
但是,通过为退出命令指定 1 个参数,对退出命令的响应echo $?
将是 1。因此,当您想要指定脚本因错误情况退出时,请使用退出命令的 1 个参数。