Linux中命令回传值$?详解
? 是一个特殊变量。这个变量代表的是上一个命令的回传值。也就是说,当我们运行某些命令的时候,这些命令都会回传一个运行后的代码。一般情况下,如果成功运行该命令,则回传值为0,如果运行过程中出现错误,就会回传错误代码(这个代码就是表示在该命令下出现错误的原因)。一般是一个非0数字。
我们知道,在shell中调用变量需要在变量前面加上 $。这也就是我们在以后的例子中用到的$?。
例一
# test –e /tmp/a.txt; echo $?
0 // /tmp/a.txt 存在,所以回传值为0
就拿例一来说,如果/tmp/a.txt不存在,那结果就是非0了。如果我们实际运行上述命令的话,我们会发现如果/tmp/a.txt不存在,回传值为1。
下面我们看另一个关于 $? 的例子
例二
# echo ‘onmpw’
onmpw //命令正常运行
# echo $?
0 //输出结果为0
# 1name=onmpw
-bash: 1name=onmpw: command not found //命令运行错误
# echo $?
127 //输出结果为127 一个非0数字,说明上一个命令运行出现错误
# echo $?
0 // 运行结果又为0 出现这种情况是因为 ?表示的是【上一个命令】的回传值,
// 我们看,它的上一个命令是不是 echo $? 。这个命令是正确执行的,输出//了127 所以我们在下一次的结果中会回传0。
好,介绍完$?以后,我们看一下它主要用于什么地方。我们知道,在linux中两个命令之间是有想依赖性的。而这个依赖性最主要的是前一个命令的结果是否正确。这时需要用到的就是上面我们说的命令回传值了。当然,除了命令回传值我们还需要借助 && 和 || 来帮忙。
看下面的例子
例三
# test –e /tmp/a.txt && echo ‘Yes’ || echo ‘No’
Yes //因为/tmp/a.txt存在,所以结果为Yes
因为/tmp/a.txt 存在 所以第一个命令正常运行,所以 &&(与)会继续向后执行下一个命令输出Yes,而echo ‘Yes’ 这个命令也正确执行,所以 ||(或)前面的结果都正确,就不再向后执行了。
&& 两边的表达式只要有一个错误整体就返回错误值。如果前面的为错误,那整体就被认为是错误的了,后面的命令就不再执行。如果前面的正确执行,那就会去执行后面的命令。
|| 两边的表达式只要有一个正确,整体就返回正确值。如果前面的命令正确执行,就不再向后执行后面的命令了。
例三中 /tmp/a.txt存在,我们换成一个不存在的文件 /tmp/b.txt
例四
# test –e /tmp/b.txt && echo “Yes” || echo “No”
No //结果输出 No
因为 /tmp/b.txt不存在,所以说第一个命令返回错误值。因此 &&整体就是错误的。但是对于||其前面的返回值是错误的,所以会继续执行后面的命令,因此要输出 No。
上面文字有些啰嗦,其实对于 && 和 || 我们学过其它编程语言的话,对这两个很容易理解。本篇主要介绍的是 $? 这个特殊的变量。因为这在shell脚本编程中经常遇到。希望本文对大家有所帮助。
相关文章
在 Linux 中安装 MySQL 客户端
发布时间:2023/05/09 浏览次数:72 分类:MySQL
-
在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Linux 中计算文件中的唯一行
发布时间:2023/05/04 浏览次数:70 分类:操作系统
-
计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数