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

  • Post author:
  • Post category:其他


括号

  • 括号一般在命令替换的时候使用。
#!/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