shell真假01的真相

短命女 2022-06-13 07:51 296阅读 0赞

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 在 [ ] 判断中不代表假。

源代码:

Center

# bash trueOrNot.sh 返回结果:

Center 1

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

源代码:

Center 2

# bash trueOrNot.sh 返回结果:

Center 3

  • 测试退出状态码:

源码:

Center 4

执行结果:# bash trueOrNot.sh

Center 5

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

Center 6

结论见文章最后

知识点:

[ ] : [ 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版 机械工业出版社。(建议不要再作为高校教材使用了)

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Shell编程(01)-入门简介

    Shell 是操作系统的最外层,Shell 可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任

    相关 Shell-01

    1、概述 大数据程序员为什么要学习Shell? (1)需要看懂运维人员编写的shell程序 (2)偶尔会编写一些简单shell程序来管理集群、提高开发效率 Shel

    相关 命题真假

    A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束: 1. 如果A参加,B也参加;

    相关 shell脚本-01

    使用变量时,建议给所有变量 按照$\{变量名\} 的方式使用。 字符串建议使用双引号""包括, 命令的结果保存到变量:      变量=$(命令的结果)  不推荐 \`命令