Shell中的括號(hào)、雙括號(hào)、方括號(hào)和雙方括號(hào)

前言

首先在Shell中,括號(hào)表示條件測(cè)試方法。主要用在if-then、case等需要條件判斷的語(yǔ)句結(jié)構(gòu)中。

最近在看bash,括號(hào)搞的我一頭霧水,所以總結(jié)一下,理清思路!

括號(hào)

  • 括號(hào)一般在命令替換的時(shí)候使用。
#!/bin/bash

today=$(date +%y%m%d)
touch log.$today

雙括號(hào)

  • 使用雙括號(hào),在比較過(guò)程中使用高級(jí)數(shù)學(xué)表達(dá)式
符號(hào) 描述
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
  • 注意,不需要將雙括號(hào)中表達(dá)式里的大于號(hào)轉(zhuǎn)義。這是雙括號(hào)命令提供的另一個(gè)高級(jí)特性。

方括號(hào)

  • 方括號(hào)定義了測(cè)試條件。

  • 第一個(gè)方括號(hào)后和第二個(gè)方括號(hào)前都要加一個(gè)空格,否則會(huì)報(bào)錯(cuò)。

  • 方括號(hào)主要包括4類(lèi)判斷:

    • 數(shù)值比較
    比較 描述
    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的長(zhǎng)度是否非0
    -z str1 檢查str1的長(zhǎng)度是否為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是否存在并是一個(gè)目錄
    -e file 檢查file是否存在
    -f file 檢查file是否存在并是一個(gè)文件
    -r file 檢查file是否存在并可讀
    -s file 檢查file是否存在并非空
    -w file 檢查file是否存在并可寫(xiě)
    -x file 檢查file是否存在并可執(zhí)行
    -O file 檢查file是否存在并屬當(dāng)前用戶所有
    -G file 檢查file是否存在并且默認(rèn)組與當(dāng)前用戶相同
    file1 -nt file2 檢查file1是否比f(wàn)ile2新
    file1 -ot file2 檢查file1是否比f(wàn)ile2舊
    $ 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 ]
    

雙方括號(hào)

  • 雙方括號(hào)提供了字符串比較的高級(jí)特性。
  • 括號(hào)中可以定義一些正則表達(dá)式來(lái)匹配字符串
  • 注意不是所有的shell都支持雙方括號(hào)!
$ 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容