2 退出状态和返回代码
在本章中,您将学习如何确定给定命令的退出状态。还将学习如何在脚本中根据不同命令的退出状态做出决定。最后,还将学习如何在自己的脚本中使用退出状态。
每次执行命令都会返回一个退出状态。 退出状态有时也称为返回代码或退出代码,是范围从0到255的整数。 按照惯例,成功执行的命令返回0 。 如果遇到某种错误,则返回非零的退出状态。
这些返回代码可用于脚本的错误检查。 它可以是简单的测试,比如检查返回代码是否为0,也可以是复杂的测试,比如检查特定的错误代码。
如果想了解各种退出状态的含义,必须查阅给定命令的文档或查看其源代码。 你可以使用man和info命令来阅读系统中大多数命令的文档。 例如,在grep man页面中,grep 在找到搜索模式时以0退出,而在找不到时以1退出。
特殊变量$?包含之前执行命令的返回代码。 在这个shell脚本片段中,ls命令的调用路径是一个不存在的文件。
$ ls /not/here
ls: cannot access '/not/here': No such file or directory
$ echo $?
2
你可以使用命令的退出状态,根据退出状态做出决定或执行不同的操作。 在本示例 shell 脚本片段中,我们使用 ping 命令测试与 www.google.com 的网络连接。 ping 命令的 -c 选项只是告诉 ping 只发送一个数据包。
#!/bin/bash
HOST="google.com"
ping -c 1 $HOST
if [ "$?" -eq "0" ]
then
echo "$HOST reachable."
else
echo "$HOST unreachable."
fi
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
可以使用逻辑 AND 和 OR。 双括弧(&&)表示AND,双管道(||)表示OR。 在下面的示例中,执行了mkdir /tmp/bak。 如果执行成功,cp 命令才会被执行。
cp test.txt /tmp/bak/ || cp test.txt /tmp
双管道后的命令只有在前一条命令失败时才会执行。 如果第一条命令返回非零的退出状态,则执行下一条命令。
mkdir /tmp/bak && cp test.txt /tmp/bak/
我们再来看看前面的例子。
#!/bin/bash
HOST="google.com"
ping -c 1 $HOST && echo "$HOST reachable."
如果想在一行中串联命令,可以用分号分隔这些命令。 分号不执行退出状态检查。 无论前一条命令是失败还是成功,分号后面的命令都会被执行。
cp test.txt /tmp/bak/ ; cp test.txt /tmp
不仅普通命令会返回退出状态,shell脚本也是如此。您可以使用exit命令来控制shell脚本的退出状态。只需在脚本中使用exit命令,并在命令后面加上0到255之间的数字即可。
如果您没有在exit命令中指定返回代码,那么之前执行的命令的退出状态将被用作退出状态。 如果在shell脚本中根本不包含exit命令也是如此。
#!/bin/bash
HOST="google.com"
ping -c 1 $HOST
if [ "$?" -ne "0" ]
then
echo "$HOST unreachable."
exit 1
fi
exit 0