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

前言

首先在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
    原文作者:Sealwk
    原文地址: https://www.jianshu.com/p/3e1eaaa3fee8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞