迹忆博客
当前位置: 主页 > 学无止境 > 操作系统 > 文章

Linux中命令回传值$?详解

发布时间: 2016-04-28 作者: 迹忆 浏览次数:

? 是一个特殊变量。这个变量代表的是上一个命令的回传值。也就是说,当我们运行某些命令的时候,这些命令都会回传一个运行后的代码。一般情况下,如果成功运行该命令,则回传值为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脚本编程中经常遇到。希望本文对大家有所帮助。

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: