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

括号

  • 括号一般在命令替换的时候使用。

#!/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
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值