shell---双中括号,逻辑运算符

系统 1751 0
      
         1
      
       #!/bin/
      
        bash


      
      
         2
      
      
        # 双中括号


      
      
         3
      
      
         4
      
      
        # 判断file1和file2文件是否同时存在.


      
      
         5
      
       # &&
      
         的作用是左边为真(返回码为0),才执行右边的命令.


      
      
         6
      
      
        # 下面用单中括号判断不正确,会提示少一个中括号.


      
      
         7
      
      
        ##########################################


      
      
         8
      
      
        if
      
       [ -f file1 && -
      
        f file2 ]


      
      
         9
      
      
        then
      
      
        10
      
      
        echo
      
      
        "
      
      
        file1 and file2 exist.
      
      
        "
      
      
        11
      
      
        else
      
      
        12
      
      
        echo
      
      
        "
      
      
        file1 and file2 not exist.
      
      
        "
      
      
        13
      
      
        fi
      
      
        14
      
      
        15
      
      
        # 用单括号分开两个命令就正确了.


      
      
        16
      
      
        ##########################################


      
      
        17
      
      
        if
      
       [ -f file1 ] && [-
      
        f file2 ]


      
      
        18
      
      
        then
      
      
        19
      
      
        echo
      
      
        "
      
      
        file1 and file2 exist.
      
      
        "
      
      
        20
      
      
        else
      
      
        21
      
      
        echo
      
      
        "
      
      
        file1 and file2 not exist.
      
      
        "
      
      
        22
      
      
        fi
      
    

 

使用举例

 

      
        if
      
       [[ (
      
        1
      
       == $#) && (
      
        "
      
      
        hello
      
      
        "
      
       == $
      
        1
      
      ) ]]; 
      
        then
      
      
        echo
      
      
        "
      
      
        hello
      
      
        "
      
      
        fi
      
    

 

 

 

[] 和 [[]] 的区别(部分):

1. 

  • 单中括号

[ 2 -gt 1 -a 2 -lt 3 ]

或者

[ \( 2 -gt 1 \) -a \( 2 -lt 3 \) ]

注意:[右边和]左边的空格, 注意()转义, 注意(的右边和)的左边空格.

  • 双中括号

[[ 2 > 1 && 2 < 3 ]]

或者

[[ (2 > 1) && (2 < 3) ]]

 

2. 双中括号正则匹配

    [[ "abc def c" == a[abc]*\ ?d* ]]
  

 

 

 

 

 

 

 

一.   bash [  ] 单双括号

基本要素:

Ø   [ ] 两个符号左右都要有空格分隔

Ø   内部操作符与操作变量之间要有空格:如  [  “a”  =  “b”  ]

Ø   字符串比较中,> < 需要写成\> \< 进行转义

Ø   [ ] 中字符串或者${}变量尽量使用"" 双引号扩住,避免值未定义引用而出错的好办法

Ø   [ ] 中可以使用 –a –o 进行逻辑运算

Ø   [ ] 是bash 内置命令:[ is a shell builtin

二.   bash  [[  ]] 双方括号

 

基本要素:

Ø   [[ ]] 两个符号左右都要有空格分隔

Ø   内部操作符与操作变量之间要有空格:如  [[  “a” =  “b”  ]]

Ø   字符串比较中,可以直接使用 > < 无需转义

Ø   [[ ]] 中字符串或者${}变量尽量如未使用"" 双引号扩住的话,会进行模式和元字符匹配

[root@localhostkuohao]# [[ "ab"=a* ]] && echo "ok"

  ok

Ø   [[] ] 内部可以使用 &&  || 进行逻辑运算

Ø   [[ ]] 是bash  keyword:[[ is a shell keyword

[[ ]] 其他用法都和[ ] 一样

Ø   [[ ]] 和 [ ] 都可以和 ! 配合使用

优先级 !  >  && > || 

逻辑运算符  < 关系运算符

逻辑运算符  : !  &&  || -a  -o

关系运算符  : <  >  \> \<  ==  = !=  – eq –ne  -gt -ge  –lt  -le

 

-----------------------------------------------------------------------------

n   [[  ]] 比[ ] 具备的优势

-----------------------------------------------------------------------------

 

    ①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。

   

    ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

   

    ③使用[[ ... ]]条件判断结构,而不是[... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

   

    ④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

       

使用[[ ... ]]条件判断结构, 而不是[ ... ], 能够防止脚本中的许多逻辑错误. 比如,&&, ||, <, 和> 操作符能够正常存在于[[]]条件判断结构中, 但是如果出现在[ ]结构中的话, 会报错。

shell---双中括号,逻辑运算符


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论