linux 中條件測試判斷
文件條件測試判斷:
-e 文件存在
-a 文件存在
這個選項的效果與-e相同. 但是它已經被"棄用"了, 并且不鼓勵使用.
-f 表示這個文件是一個一般文件(并不是目錄或者設備 文件)
-s 文件大小不為零
-d 表示這是一個目錄
-b 表示這是一個塊設備(硬盤, 光驅, 等等.)
-c 表示這是一個字符設備(鍵盤, modem, 聲卡, 等等.)
-p 這個文件是一個管 道
-h 這是一個符 號鏈接
-L 這是一個符號鏈接
-S 表示這是一個socket
-t 文件(描 述符)被關聯到一個終端設備上
這個測試選項一般被用來檢測腳本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否來自于一個終端.
-r 文件是否具有可讀權限(指的是正在運 行這個測試命令的用戶是否具有讀權限)
-w 文件是否具有可寫權限(指的是正在運行這個測試命令的用戶是否具有寫權限)
-x 文件是否具有可執行權限(指的是正在運行這個測試命令的用戶是否具有可執行權限)
-g set-group-id(sgid)標記被設置到文件或目錄上
如果目錄具有sgid標 記的話, 那么在這個目錄下所創建的文件將屬于擁有這個目錄的用戶組, 而不必是創建這個文件的用戶組. 這個特性對于在一個工作組中共享目錄非常有用.
-u set-user-id (suid)標記被設置到文件上
如果一個root用戶所擁有的二進制可執行文件設置了set-user-id標記位的話, 那么普通用戶也會以root權限來 運行這個文件. [1] 這對于需要訪問系統硬件的執行程序(比如pppd和cdrecord)非常有用. 如果沒有suid標志的話, 這些二進制執行程序是不能夠被非root用戶調用的.
對于設置了suid標 志的文件, 在它的權限列中將會以s表示
.
-k
設置粘貼位
對于"粘貼位"的一般了解, save-text-mode標 志是一個文件權限的特殊類型. 如果文件設置了這個標志, 那么這個文件將會被保存到緩存中, 這樣可以提高訪問速度. [2] 粘貼位如果設置在目錄中, 那么它將限制寫權限. 對于設置了粘貼位的文件或目錄, 在它們的權限標記列中將會顯示t.
如果用戶并不擁有這個設置了粘貼位的目錄, 但是他在這個目錄下具有寫權限, 那么這個用戶只能在這個目錄下刪除自己所擁有的文件. 這將有效的防止用戶在一個公共目錄中不慎覆蓋或者刪除別人的文件. 比如說/tmp目錄. (當然, 目錄的所有者或者root用 戶可以隨意刪除或重命名其中的文件.
)
-O 判斷你是否是文件的擁有者
-G 文件的group-id是否與你的相同
-N 從文件上一次被讀取到現在為止, 文件是否被修改過
f1 -nt f2
文件f1比 文件f2新
f1 -ot f2
文件f1比 文件f2舊
f1 -ef f2
文件f1和 文件f2是相同文件的 硬鏈接
!
"非" -- 反轉上邊所有測試的結果(如果沒給出條件, 那么返回真).
注意:變量引用時,有且在比較中,一定要引號“” ‘’,這樣防止出現錯誤,還有就是盡量用雙中擴號中[[ ]]
[[ "$num1" == "$num2" ]] [[ 'str1' == 'str2' ]]
字符串判斷:
-z "STRING":判斷指定的字串為空,空則為真,不空為假
-n "STRING":判斷指定的字串是否為不空,不空為真,空為假
數值測試
-eq:是否等于; [ $num1 -eq $num2 ]
-ne 是否不等于
-gt是否大于
-ge是否大于等于
-lt 是否小于
-le是否小于等于
字符串測試
==:是否等于 兩邊要留空格
> :是否大于
<: 是否小于
!= 是否不等于
=~ 左側的字符串是否能夠被右側的PATTERN所匹配
[ "$string" == "smile" ]