美文网首页
shell中布尔运算和逻辑运算的区别

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

作者: 忧郁的冥 | 来源:发表于2019-12-17 16:58 被阅读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不执行.
    

    相关文章

      网友评论

          本文标题:shell中布尔运算和逻辑运算的区别

          本文链接:https://www.haomeiwen.com/subject/buosnctx.html