下面列出了常用的运算符,假定变量 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不执行.
网友评论