shell中布尔运算和逻辑运算的区别

2019-12-17  本文已影响0人  忧郁的冥

下面列出了常用的运算符,假定变量 a 为 10,变量 b 为 20:

布尔运算

运算符                  说明                                                 举例
!       非运算,表达式为 true 则返回 false,否则返回 true。           [ ! false ] 返回 true。
-o      或运算,有一个表达式为 true 则返回 true。                     [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a      与运算,两个表达式都为 true 才返回 true。                     [ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算

运算符         说明                                     举例
&&         逻辑的 AND                   [[ $a -lt 100 && $b -gt 100 ]] 返回 true
||         逻辑的 OR                    [[ $a -lt 100 || $b -gt 100 ]] 返回 true

运算结果

shell中有提到“在shell程序中,0表示真,非0表示假,这一点与C语言恰恰相反。”其实是“判断的最终结果只有两种可能:真(0)或者假(非 0)”。也就是说,只有判断的结果返回值为0时为真,1为假。这一点尤其不可与C语言的while(1)混为一谈。
判断[ ] : [ condition ] 为判断符,其中的条件condition为真返回 0,假返回 1
状态码:
每个表达式执行完退出的时候,都会返回一个退出状态码(exit status 0~255),if语句根据 [ ] 表达式执行的退出状态码进行判断,在所有的退出状态码中,0表示执行成功,1~255为退出的状态代号。所以,与C语言不同的就在这里,shell的if [ 1 ] 中整数 0 1 与C语言中的 while(1)用法并不相通,也就是说整数 0 1 作为退出状态码的时候,确实表示真假,但是并不能作为 if [ ] 的判断条件来用,虽然shell也是弱数据类型的语言。
即:作为条件的退出状态码时,0(成功)表示真,非0表示假
直接作为if []的判断条件if [ 1 ]时,任何数字都返回真

两种运算方式的区别

从上述举例中可以看出使用逻辑运算符需要加上[[双大括号]],布尔运算符只需要[单大括号]

逻辑运算符具有特殊的短路功能,可以利用短路特性来实现使用命令1的执行结果(执行shell命令后会得到一个状态码)控制命令2是否执行的效果。

举例
 [[ cmd1 && cmd2]]   当cmd1==false,则cmd2不执行.当cmd1==true,则执行cmd2.
 [[ cmd1 || cmd2]]   当cmd1==false,则cmd2执行.当cmd1==true,则cmd2不执行.
上一篇 下一篇

猜你喜欢

热点阅读