shell中比較(檔案測試,字串,整數)

來源:互聯網
上載者:User

標籤:

檔案測試(-f,-d,-r,-r,...)
  1. [ -f /root/file.txt ],[ -d /root/mydir ]
  2. [[ -f /root/file.txt ]]
    檔案測試方面[[]]與[]一樣
字串比較(-z,-n,!=,==,...)
  1. [ -z "${str}" ],[ "${str}" != "${str}" ],[ ! -n "${str}" ]
    []只能用於字元比較,不能用於模式比對
  2. [[ -z "${str}" ]],[[ ! -n "${str}" ]]
  3. [[ $a == z* ]]          # 如果$a以"z"開頭(模式比對)那麼將為true
    [[ hello == hell? ]]    # 模式比對[[ ab == "test" ]]      # 如果$a等於"test",那麼結果為true
    [[]]可以進行模式比對,使用"str"則str為字串對待
  4. 字串比較時可以把右邊的作為一個模式(這是右邊的字串不加雙引號的情況下。如果右邊的字串加了雙引號,則認為是一個文本字串。),而不僅僅是一個字串,比如[[ hello == hell? ]],結果為真。
  5. 使用-a,-o進行邏輯串連:[ "${str1}" == "test" -a -z "${str}" ]
  6. 使用-a,-o進行邏輯串連:[[ "${str1}" == "test" && -z "${str}" ]]
    []使用-a,-o,[[]]使用&&,||
  7. 字串包含:[[ "$a3" =~ "$a1" ]]
    如果a1包含在a3中,則為真
算術比較
  1. ((4 > 2)),((4+2 > 3))
    #這個算術運算,整數比較都適用
  2. [ 5 -gt 3 ],[ 5 \> 3 ]
  3. [[ 5 > 3 ]],[[ 5 -gt 3 ]]
  4. [[3+5 -gt 2]]
    不可使用<,>,結果經常出錯
  5. ((a + b))
    結果為非0值時,返回真
  [...],[[...]],((...))區別 
  1. 在bash中((...))主要進行算術運算(上面的兩個都不行),也比較適合進行整數比較,可以直接使用熟悉的<,>等比較子。可以直接使用變數名如var而不需要$var這樣的形式。支援分號隔開的多個運算式
  2. 在命令列裡test expr和[ expr ]的效果相同。test的三個基本作用是判斷檔案、判斷字串、判斷整數。支援使用與或非將運算式串連起來
    2.test和[]中可用的比較子只有==和!=,兩者都是用於字串比較的,不可用於整數比較,整數比較只能使用-eq, -gt這種形式。如果比較"ab"和"bc",必須使用轉義符:[ ab \< bc ]
  3. [[ ]],這是內建在shell中的一個命令,它支援字串的模式比對,邏輯組合可以不使用test的-a,-o而使用&&,||這樣更親切的形式
  4. [ ... ]為shell命令,所以在其中的運算式應是它的命令列參數,所以串比較操作符">"與"<"必須轉義,否則就變成IO改向操作符了. 在[[中"<"與">"不需轉義
附:比較命令
運算子 描述 樣本
檔案比較子
-e filename 如果 filename 存在,則為真 [ -e /var/log/syslog ]
-d filename 如果 filename 為目錄,則為真 [ -d /tmp/mydir ]
-f filename 如果 filename 為常規檔案,則為真 [ -f /usr/bin/grep ]
-L filename 如果 filename 為符號連結,則為真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可讀,則為真 [ -r /var/log/syslog ]
-w filename 如果 filename 可寫,則為真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可執行,則為真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,則為真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字串比較運算子 (請注意引號的使用,這是防止空格擾亂代碼的好方法)
-z string 如果 string 長度為零,則為真 [ -z "$myvar" ]
-n string 如果 string 長度非零,則為真 [ -n "$myvar" ]
string1 = string2 如果 string1 與 string2 相同,則為真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 與 string2 不同,則為真 [ "$myvar" != "one two three" ]
算術比較子
num1 -eq num2 等於 [ 3 -eq $mynum ]
num1 -ne num2 不等於 [ 3 -ne $mynum ]
num1 -lt num2 小於 [ 3 -lt $mynum ]
num1 -le num2 小於或等於 [ 3 -le $mynum ]
num1 -gt num2 大於 [ 3 -gt $mynum ]
num1 -ge num2 大於或等於 [ 3 -ge $mynum ]

shell中比較(檔案測試,字串,整數)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.