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脚本编程中经常遇到。希望本文对大家有所帮助。
本文转载自:迹忆客(https://www.jiyik.com)
以上是 Linux中命令回传值$?详解 的全部内容, 来源链接: utcz.com/z/290059.html