当前位置:   article > 正文

shell真假01的真相_shell的测试表达式的真假是不是和c语言的判定表达式真假相反

shell的测试表达式的真假是不是和c语言的判定表达式真假相反

http://blog.csdn.net/timo1160139211/article/details/74079553

最近学shell遇到了不理解的问题,到底数字0 1代不代表真假?现在去翻阅资料,做一深度的剖析和总结:

为什么会出现这样的理解?

        在许多教科书中,有明确的指出:“在shell程序中,0表示真,非0表示假,这一点与C语言恰恰相反。”(例如:《linux系统应用与开发教程》第3版 机械工业出版社)。“这一点与C语言恰恰相反” -- 我相信这误导了大量的阅读此类书籍的学生去默认的将shell的0 1与C语言的0 1比较,书中这段确实不明确,但我们不能断章取义,这部分的上一段中有提到:“判断的最终结果只有两种可能:真(0)或者假(非 0)”。也就是说,只有判断的结果返回值为0时为真,1为假。这一点尤其不可与C语言的while(1)混为一谈。

  • 那么,到底 0 1什么时候表示真假呢?我们来测试几种不同的情况:

(全部源代码见 ->github<- )如果看不懂代码的含义,请先跳到下一部分 {知识点} 或者去 ->blog<- 见详解

  • 这是一段bash代码,我们可以看到其中的 if [ ] 判断 0 1 真假情况,可是我们在紧跟的图中可以清楚的看到, if [ 0 ] 确实执行了,这表明,数字 0 在 [ ] 判断中不代表假。

源代码:

# bash trueOrNot.sh 返回结果:

  • 我们再来看一种情况:-eq 比较两个整数的大小,从返回的结果可以看到,10==10为真时返回的却是 0 ,10==15为假时返回的是 1。

源代码:

# bash trueOrNot.sh 返回结果:

  • 测试退出状态码:

源码:

执行结果:# bash trueOrNot.sh

测试退出状态码:# echo $?



结论见文章最后

知识点:

[ ] :  [ condition ] 为判断符,其中的条件condition为真返回 0,假返回 1 。

echo : echo str  打印字符串 str (默认换行)

-eq : int1 -eq int2 是整数相等判断符,两边整数相等时返回真 0,否则返回假 1 。

$? : $ 符号用来引用变量的值,? 是一个特殊的变量,存储紧邻的前驱命令执行的返回值,$? 一般组合用来检查上一个命令执行结果的返回值。

exit : exit 0~255 ,用来返回自己的退出状态码,超过255的值 将被自动执行 模256的运算。

总结:

正确的认识:

  • 每个表达式执行完退出的时候,都会返回一个退出状态码(exit status 0~255),if语句根据 [ ] 表达式执行的退出状态码进行判断,在所有的退出状态码中,0表示执行成功,1~255为退出的状态代号(详见下表)。所以,与C语言不同的就在这里,shell的if [ 1 ] 中整数 0 1 与C语言中的 while(1)用法并不相通,也就是说整数 0 1 作为退出状态码的时候,确实表示真假,但是并不能作为 if [ ] 的判断条件来用,虽然shell也是弱数据类型的语言。
  • #    The final conclusion is :
  • #             1. each expression will return a value between 0 and 255.
  • #             2. the state value 0 means that the expression finished fluently.
  • #             3. others state values means expression exit with an exception.

Linux退出状态码(常):

状态码:描述:
0命令成功结束
1通用未知错误
2误用shell命令
126命令不可执行
127没找到命令
128无效退出参数
130通过Ctrl + C 终止

参考资料:

《Linux命令行与shell脚本编程大全》人民邮电出版社;


建议不要看的书:

《Linux系统应用与开发教程》第3版  机械工业出版社。(建议不要再作为高校教材使用了)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/781515
推荐阅读
相关标签
  

闽ICP备14008679号