首页 > 系统相关 >shell简明教程2退出状态和返回代码

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

时间:2023-08-26 19:57:08浏览次数:43  
标签:返回 状态 教程 shell 简明 命令 HOST 退出 com

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

参考资料

可以使用逻辑 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

标签:返回,状态,教程,shell,简明,命令,HOST,退出,com
From: https://www.cnblogs.com/testing-/p/17653855.html

相关文章

  • 无涯教程-进程 - 管道(Pipes)
    管道是两个或多个相关进程之间的通信介质,它可以在一个进程内,也可以在子进程与父进程之间进行通信。可以实时查看管道机制,例如用管道将水填充到某个容器(例如桶)中,然后取回某人(例如用杯子)。填充进程只不过是写入管道,而读取进程只不过是从管道中检索,这意味着一个输出(水)被输入......
  • Cinema 4D Download Install资源及使用教程
    Cinema4Dr25是一款专业的3D建模、动画、模拟和渲染软件解决方案,该软件其快速、强大、灵活和稳定的工具集使设计、运动图形、VFX、AR/MR/VR、游戏开发和所有类型的可视化专业人士更容易和高效地使用3D工作流程。使用它,哪怕是像制作动物毛发这样十分精细的三维特效也是可以轻轻......
  • 无涯教程-进程 - 其它进程
    到目前为止,我们已经讨论了进程,进程的创建,父进程和子进程等。如果不讨论其他相关进程(如孤立进程,僵尸进程和守护进程),则将是不完整的。孤立进程当我们运行程序或应用程序时,该应用程序的父进程是shell,当我们使用fork()创建进程时,新创建的进程是子进程,而创建子进程的进程是父进程......
  • [Python] PyCharm(Python IDE)安装教程
    1简介PyCharm是目前最流行、使用最广泛的PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。比如调试、语法高亮、项目管理、代码跳转、智能提示、单元测试、版本控制等。此外,还提供了一些高级功能,以......
  • 无涯教程-进程 - 创建&终止
    到现在为止,我们知道无论何时执行程序,都会创建一个进程,并且该进程将在执行完成后终止,如果我们需要在程序中创建一个进程,并且可能希望为其安排其他任务,该怎么办。能做到吗?是的,显然是通过进程创建的,当然,工作完成后,它将自动终止,或者您可以根据需要终止它。进程创建是通过fork()系......
  • 求生之路2私人服务器开服搭建教程centos
    求生之路2私人服务器开服搭建教程centos大家好我是艾西,朋友想玩求生之路2(left4dead2)重回经典。Steam玩起来有时候没有那么得劲,于是问我有没有可能自己搭建一个玩玩。今天跟大家分享的就是求生之路2的自己用服务器搭建的一个心路历程。(因平台原因本文中www即为xxx,com即为zzz,http/......
  • 求生之路2社区服务器sourcemod安装配置搭建教程centos
    求生之路2社区服务器sourcemod安装配置搭建教程centos大家好我是艾西,通过上文我们已经成功搭建了求生之路2的服务端。但是这个服务端是纯净的服务端,就是那种最纯粹的原版。如果想要实现插件、sm开头的命令等功能,需要安装这个sourcemod。那本篇文章给搭建简单的说下sourcemod安装以......
  • Stable Diffusion web UI 部署详细教程
    前言本文使用AutoDL平台进行StableDiffusionwebUI云端部署AutoDL官网:[AutoDL算力云|弹性、好用、省钱。租GPU就上AutoDL]StableDiffusionwebUI官网:AUTOMATIC1111/stable-diffusion-webui:StableDiffusionwebUI(github.com)步骤租用实例选择社区镜像AUTOM......
  • Android入门教程 | Fragment 基础概念
    什么是Fragment?Fragment,直译为“碎片”,“片段”。Fragment表示FragmentActivity中的行为或界面的一部分。可以在一个Activity中组合多个片段,从而构建多窗格界面,并在多个Activity中重复使用某个片段。可以将片段视为Activity的模块化组成部分,它具有自己的生命周期,能接收自......
  • 无涯教程-进程 - 子进程监控
    正如我们所看到的,每当我们使用fork从程序创建子进程时,都会发生以下情况-当前进程成为父进程新进程成为子进程如果父进程比子进程提前完成任务然后退出,会发生什么?现在谁将成为子进程的父进程?子进程的父进程是init进程,它是启动所有任务的第一个进程。为了监视子进程的执行状......