算術操作
+ - * / %
關係操作
< > <= >= == != && ||
測試操作
測試命令 test [ ] ` ` (( ))
1、測試文件狀態
-e 文件存在
-f file 是一個regular 文件(不是目錄或者設備文件)
-s 文件長度不爲0
-d 文件是個目錄
-b 文件是個塊設備(軟盤,cdrom 等等)
-c 文件是個字符設備(鍵盤,modem,聲卡等等)
-p 文件是個管道
-h 文件是個符號鏈接
-L 文件是個符號鏈接
-S 文件是個socket
-t 關聯到一個終端設備的文件描述符
-r 文件具有讀權限(對於用戶運行這個test)
-w 文件具有寫權限(對於用戶運行這個test)
-x 文件具有執行權限(對於用戶運行這個test)
-g set-group-id(sgid)標誌到文件或目錄上
-u set-user-id(suid)標誌到文件上
-k 設置粘貼位,見<<UNIX 環境高級編程中文版>>第65 頁.
-O 你是文件的所有者.
-G 文件的group-id 和你的相同.
-N 從文件最後被閱讀到現在,是否被修改.
f1 -nt f2 文件 f1 比f2 新
f1 -ot f2 f1比f2 老
f1 -ef f2 f1和f2 都硬連接到同一個文件.
! 非--反轉上邊測試的結果(如果條件缺席,將返回true)
2、字符串測試
= 兩個字符串相等
!= 兩個字符串不相等
-z 空串
-n 非空串
$ VAR1='abc'
$ VAR2='123'
$ [ "$VAR1" = "$VAR2" ]
$ echo $?
1
3、測試數值
-eq 等於
-ne 不等於
-gt 大於
-lt 小於
-ge 大於等於
-le 小於等於
4. 拓展測試符號 ` ` (())
數字測試符號
# [ 10 < 2 ] # 語法錯誤
-bash: 2: 沒有那個文件或目錄
#
# [[ 2 > 10 ]] # 結果錯誤
# echo $?
0
# [[ 20 > 10 ]] # 正確
# echo $?
0
# (( 10 < 20 ))
# echo $?
0
字符測試
# [ "aa" = "aa" ]
# echo $?
0
# [[ "aa" = "aa" ]]
# echo $?
0
# (( "aa" = "aa" )) #結果錯誤
# echo $?
1
混合測試
# [ a = a -a 10 < 20 ]
-bash: 20: 沒有那個文件或目錄
結論:
比較數字,使用(( ))
其他測試使用 ` `
包含數字比較的混合測試,使用標準語法