翼度科技»论坛 云主机 LINUX 查看内容

shell简明教程2退出状态和返回代码

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
2 退出状态和返回代码

在本章中,您将学习如何确定给定命令的退出状态。还将学习如何在脚本中根据不同命令的退出状态做出决定。最后,还将学习如何在自己的脚本中使用退出状态。
每次执行命令都会返回一个退出状态。 退出状态有时也称为返回代码或退出代码,是范围从0到255的整数。 按照惯例,成功执行的命令返回0 。 如果遇到某种错误,则返回非零的退出状态。
这些返回代码可用于脚本的错误检查。 它可以是简单的测试,比如检查返回代码是否为0,也可以是复杂的测试,比如检查特定的错误代码。
如果想了解各种退出状态的含义,必须查阅给定命令的文档或查看其源代码。 你可以使用man和info命令来阅读系统中大多数命令的文档。 例如,在grep man页面中,grep 在找到搜索模式时以0退出,而在找不到时以1退出。
特殊变量$?包含之前执行命令的返回代码。 在这个shell脚本片段中,ls命令的调用路径是一个不存在的文件。
  1. $ ls /not/here
  2. ls: cannot access '/not/here': No such file or directory
  3. $ echo $?
  4. 2
复制代码
你可以使用命令的退出状态,根据退出状态做出决定或执行不同的操作。 在本示例 shell 脚本片段中,我们使用 ping 命令测试与 www.google.com 的网络连接。 ping 命令的 -c 选项只是告诉 ping 只发送一个数据包。
  1. #!/bin/bash
  2. HOST="google.com"
  3. ping -c 1 $HOST
  4. if [ "$?" -eq "0" ]
  5. then
  6. echo "$HOST reachable."
  7. else
  8. echo "$HOST unreachable."
  9. fi
复制代码
参考资料

可以使用逻辑 AND 和 OR。 双括弧(&&)表示AND,双管道(||)表示OR。 在下面的示例中,执行了mkdir /tmp/bak。 如果执行成功,cp 命令才会被执行。
  1. cp test.txt /tmp/bak/ || cp test.txt /tmp
复制代码
双管道后的命令只有在前一条命令失败时才会执行。 如果第一条命令返回非零的退出状态,则执行下一条命令。
  1. mkdir /tmp/bak && cp test.txt /tmp/bak/
复制代码
我们再来看看前面的例子。
  1. #!/bin/bash
  2. HOST="google.com"
  3. ping -c 1 $HOST && echo "$HOST reachable."
复制代码
如果想在一行中串联命令,可以用分号分隔这些命令。 分号不执行退出状态检查。 无论前一条命令是失败还是成功,分号后面的命令都会被执行。
  1. cp test.txt /tmp/bak/ ; cp test.txt /tmp
复制代码
不仅普通命令会返回退出状态,shell脚本也是如此。您可以使用exit命令来控制shell脚本的退出状态。只需在脚本中使用exit命令,并在命令后面加上0到255之间的数字即可。

如果您没有在exit命令中指定返回代码,那么之前执行的命令的退出状态将被用作退出状态。 如果在shell脚本中根本不包含exit命令也是如此。
  1. #!/bin/bash
  2. HOST="google.com"
  3. ping -c 1 $HOST
  4. if [ "$?" -ne "0" ]
  5. then
  6. echo "$HOST unreachable."
  7. exit 1
  8. fi
  9. exit 0
复制代码
来源:https://www.cnblogs.com/testing-/p/17653855.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具