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脚本编程中经常遇到。希望本文对大家有所帮助。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
发布时间:2024/03/19 浏览次数:81 分类:javascript
-
本教程展示了 html5、html 4.01、xhtml 和 vbscripts 中 html 脚本类型属性的使用。
发布时间:2024/03/15 浏览次数:75 分类:编程语言
-
本教程将展示我们如何在批处理脚本中包含或添加注释。
发布时间:2024/03/15 浏览次数:186 分类:编程语言
-
本教程将展示在批处理脚本中使用 pause 关键字。
发布时间:2024/03/15 浏览次数:205 分类:编程语言
-
本教程将教授批处理脚本中的颜色。
发布时间:2024/03/15 浏览次数:118 分类:编程语言
-
本教程将讨论批处理脚本中 if else 条件的结构。
发布时间:2024/03/15 浏览次数:148 分类:编程语言
-
本教程将了解我们如何使用批处理脚本发送邮件。
发布时间:2024/03/15 浏览次数:192 分类:编程语言
-
本教程将讨论如何在批处理脚本中声明数组。