美文网首页Shellshellshell编程
Shell中的括号、双括号、方括号和双方括号

Shell中的括号、双括号、方括号和双方括号

作者: Sealwk | 来源:发表于2017-11-18 12:38 被阅读37次

    前言

    首先在Shell中,括号表示条件测试方法。主要用在if-then、case等需要条件判断的语句结构中。

    最近在看bash,括号搞的我一头雾水,所以总结一下,理清思路!

    括号

    • 括号一般在命令替换的时候使用。
    #!/bin/bash
    
    today=$(date +%y%m%d)
    touch log.$today
    

    双括号

    • 使用双括号,在比较过程中使用高级数学表达式
    符号 描述
    val++ 后增
    val-- 后减
    ++val 先增
    --val 先减
    逻辑求反
    位求反
    ** 幂求反
    << 左位移
    >> 右位移
    && 逻辑和
    逻辑或
    $ cat test23.sh
    #!/bin/bash
    
    val1=10
    if(( $val1 ** 2 > 90 ))
    then
        ((val2 = $val1 ** 2))
        echo "The square of $val1 is $val2"
    fi
    
    # seal @ bogon in ~/Desktop/Shell [16:48:19]
    $ ./test23.sh
    The square of 10 is 100
    
    • 注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。

    方括号

    • 方括号定义了测试条件。

    • 第一个方括号后和第二个方括号前都要加一个空格,否则会报错。

    • 方括号主要包括4类判断:

      • 数值比较
      比较 描述
      n1 -eq n2 检查n1是否与n2相等
      n1 -ge n2 检查n1是否大于或等于n2
      n1 -gt n2 检查n1是否大于n2
      n1 -le n2 检查n1是否小于或等于n2
      n1 -lt n2 检查n1是否小于n2
      n1 -ne n2 检查n1是否不等于n2
      #!/bin/bash
      # Using numeric test evaluations
      value1=10
      value2=11
      #
      if [ $value1 -gt 5 ]
      then
          echo "The test value $value1 is greater than 5"
      fi
      #
      if [ $value1 -eq $value2 ]
      then
          echo "The values are equal"
      else
          echo "The values are different"
      fi
      #
      
      • 字符串比较
      比较 描述
      str1 = str2 检查str1是否和str2相同
      str1 != str2 检查str1是否和str2不同
      str1 < str2 检查str1是否比str2小
      str1 > str2 检查str1是否比str2大
      -n str1 检查str1的长度是否非0
      -z str1 检查str1的长度是否为0
      $ cat test8.sh
      #!/bin/bash
      # testing string equality testuser=baduser
      #
      if [ $USER != $testuser ] then
          echo "This is not $testuser"
      else
          echo "Welcome $testuser"
      fi
      $
      $ ./test8.sh
      This is not baduser
      
      • 文件比较
      比较 描述
      -d file 检查file是否存在并是一个目录
      -e file 检查file是否存在
      -f file 检查file是否存在并是一个文件
      -r file 检查file是否存在并可读
      -s file 检查file是否存在并非空
      -w file 检查file是否存在并可写
      -x file 检查file是否存在并可执行
      -O file 检查file是否存在并属当前用户所有
      -G file 检查file是否存在并且默认组与当前用户相同
      file1 -nt file2 检查file1是否比file2新
      file1 -ot file2 检查file1是否比file2旧
      $ cat test11.sh
      #!/bin/bash
      # Look before you leap
      # jump_directory=/home/arthur #
      if [ -d $jump_directory ] then
         echo "The $jump_directory directory exists"
         cd $jump_directory
         ls
      else
         echo "The $jump_directory directory does not exist"
      fi #
      $
      $ ./test11.sh
      The /home/arthur directory does not exist
      
      • 符合条件比较
      [ condition1 ] && [ condition2 ]
      [ condition1 ] || [ condition2 ]
      

    双方括号

    • 双方括号提供了字符串比较的高级特性。
    • 括号中可以定义一些正则表达式来匹配字符串
    • 注意不是所有的shell都支持双方括号!
    $ cat test24.sh
    #!/bin/bash
    
    if [[ $USER == s* ]]
    then
        echo "Hello Seal"
    else
        echo "Sorry, I do not know you"
    fi
    
    # seal @ bogon in ~/Desktop/Shell [17:36:57]
    $ ./test24.sh
    Hello Seal

    相关文章

      网友评论

        本文标题:Shell中的括号、双括号、方括号和双方括号

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