shell 條件判斷 大全

shell 條件判斷 大全
   大多數情況下,可以使用測試命令 來對條件進行測試。比如可以比較字符串、判斷文件 是否存在及是否可讀等等...
   通常用" [ ] "來表示條件測試。注意這裏的空格很重要。要確保方括號的空格。  
   [ -f "somefile" ] :判斷是否是一個文件
   [ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行權限
   [ -n "$var" ] :判斷$var變量是否有值
   [ "$a" = "$b" ] :判斷$a和$b是否相等

[  ] :條件測試. 條件測試表達式放在[ ]中.

[[  ]]: 是一個擴展的"[   ]"命令,[[  ]]結構比[ ]結構更加通用. 使用` `.``.``.` `條件判斷結構, 而不是[ ... ], 能夠防止腳本 中的許多邏輯錯誤.
        比如,&& , ||, <, 和> 操作符能夠正常存在於` `條件判斷結構中, 但是如果出現在[ ]結構中的話, 會報錯.

(( )) :整數擴展. 擴展並計算在(( ))中的整數表達式. 雙圓括號結構也被認爲是在Bash中使用C語言風格操作變量的一種處理機制.

1.文件狀態判斷
如果下面的條件成立將會返回真.
-e   文件或目錄是否存在
   -f    是否爲文件(file)
   -s    文件大小不爲零
   -d    是否爲目錄
-r    文件是否具有可讀權限(指的是正在運行 這個測試命令的用戶 是否具有讀權限)
   -w    文件是否具有可寫權限(指的是正在運行這個測試命令的用戶是否具有寫權限)
   -x    文件是否具有可執行權限(指的是正在運行這個測試命令的用戶是否具有可執行權限)
   -b    表示這是一個塊設備(軟盤, 光驅, 等等.)
   -c    表示這是一個字符設備(鍵盤, mod em, 聲卡, 等等.)
   -p    這個文件是一個管道
   -h    這是一個符號鏈接
   -L    這是一個符號鏈接
   -S    表示這是一個socket

   -t    文件(描述符)被關聯到一個終端設備上,這個測試選項一般被用來檢測腳本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否來自於一個終端.

   -g    set-group-id(sgid)標記被設置 到文件或目錄上,如果目錄具有sgid標記的話, 那麼在這個目錄下所創建的文件將屬於擁有這個目錄的用戶組, 而不必是創建這個文件的用戶組. 這個特性對於在一個工作組中共享目錄非常有用.
   -u    set-user-id (suid)標記被設置到文件上,如果一個root用戶所擁有的二進制可執行文件設置了set-user-id標記位的話, 那麼普通用戶也會以root權限來運行這個文件. [1] 這對於需要訪問系統 硬件的執行程序(比如pppd和cdrecord)非常有用. 如果沒有suid標誌的話, 這些二進制執行程序是不能夠被非root用戶調用的.
   -k    設置粘貼位 對於"粘貼位"的一般瞭解, save-text-mode標誌是一個文件權限的特殊類型. 如果文件設置了這個標誌, 那麼這個文件將會被保存到緩存 中, 這樣可以提高訪問速度. [2] 粘貼位如果設置在目錄中, 那麼它將限制寫權限. 對於設置了粘貼位的文件或目錄, 在它們的權限標記列中將會顯示t.

   -O    判斷你是否是文件的擁有者

   -G    文件的group-id是否與你的相同
   -N    從文件上一次被讀取到現在爲止, 文件是否被修改過

   f1 -nt f2    文件f1比文件f2新

   f1 -ot f2    文件f1比文件f2舊
   f1 -ef f2    文件f1和文件f2是相同文件的硬鏈接
! “非 ”反轉上邊所有測試結果

2.整數值比較
 -eq    等於    如:    if [ "$a" -eq "$b" ]
  -ne    不等於         if [ "$a" -ne "$b" ]
  -gt     大於             if [ "$a" -gt "$b" ]
-lt      小於             f [ "$a" -lt "$b" ]
  -ge    大於等於      if [ "$a" -ge "$b" ]
-le     小於等於      if [ "$a" -le "$b" ]

<     小於(在雙括號中使用)          (("$a" < "$b"))
   <=   小於等於(在雙括號中使用)    (("$a" <= "$b"))
   >    大於(在雙括號中使用)            (("$a" > "$b"))
   >=   大於等於(在雙括號中使用)    (("$a" >= "$b"))
3.字符串比較
=     等於    if [ "$a" = "$b" ]
  ==   等於    if [ "$a" == "$b" ],與=等價.
  !=    不等號    if [ "$a" != "$b" ],這個操作符將在` `.``.``.` `結構中使用模式 匹配.
  <     小於, 按照ASCII字符進行排序,if [[ "$a" < "$b" ]],if [ "$a" /< "$b" ],注意"<"使用在[ ]結構中的時候需要被轉義.
  >     大於, 按照ASCII字符進行排序    if [[ "$a" > "$b" ]],if [ "$a" /> "$b" ],注意">"使用在[ ]結構中的時候需要被轉義.
  -z    字符串爲"null", 意思就是字符串長度爲零
  -n   字符串不爲"null"

4.邏輯判斷
&&  (-a) 邏輯與 : 兩邊都爲真,則爲真
  ||     (-o) 邏輯或 : 兩邊任何一個爲真,則爲真
  !              邏輯否 : 表示當指定的條件表達式不成立時,整個測試命令的結果則爲真。

判斷一個變量是否全爲數字的方法
read -p ”input a number:“  number
a. [[ $number =~ ^[0-9]+$ ]]
b. [ $number -ge 0 ] &>/dev/null  如果不爲數字時,會報錯,
&>/dev/null可以免除報錯。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章