shell中的測試

算術操作
    + - * / %
 關係操作
    < > <= >= == != && ||
 測試操作
 測試命令  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: 沒有那個文件或目錄
   
   結論:
  比較數字,使用(( ))
  其他測試使用 ` `
  包含數字比較的混合測試,使用標準語法

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