1. 程式人生 > >07-shell if條件測試和比較

07-shell if條件測試和比較

less != 字符串 director 關系運算 鏈接文件 文件 -a 運算符

if條件測試常用的語法

  • test <測試表達式>
  • [ <測試表達式> ]
  • [[ <測試表達式> ]]
  • ((<測試表達式>))

test命令和[]測試操作符

  • test <測試表達式>
  • [ <測試表達式> ]

(這兩種語法是等價的)

測試操作符 全拼 說明
-d directory 文件存在且為目錄
-f file 文件存在且為普通文件
-e exist 文件存在
-r read 文件存在且可讀
-s size 文件存在且文件大小不為0
-w write 文件存在且可寫
-x exexutable 文件存在且可執行
-L link 文件存在且為鏈接文件
f1 -nt f2 newer than 文件f1比文件f2新
f1 -ot f2 olderthan 文件f1比文件f2舊
-n not zero 字符串的長度不為0
-z zero 字符串的長度為0
s1 = s2   字符串1等於字符串2
s1 != s2   字符串1不等於字符串2
-eq equal 相等
-ne not equal 不相等
-gt greater than 大於
-ge greater equal 大於等於
-lt less than 小於
-le less equal 小於等於
-a and
-o or
! not

範例:

test -f /data/test.sh && echo true || echo false
[ -f /data/test.sh ] && echo true || echo false
  • 用[]測試變量時,如果被測試的變量不加雙引號,那麽測試結果可能會是不正確的:
file1=/etc/passwd
[ -f "$file1" ] && echo 1 || echo 0

如果是文件實體路徑,那麽加引號與不加引號的結果是一樣的:
[ -f "/etc/passwd" ] && echo 1 || echo 0
[ -f /etc/passwd ] && echo 1 || echo 0

[[]]測試操作符

  • [[ <測試表達式> ]]
在[[]]中可以使用通配符等進行模式匹配
[[ ! $a =~ [1-3] ]] && echo 1 || echo 0
測試操作符 全拼 說明
-d directory 文件存在且為目錄
-f file 文件存在且為普通文件
-e exist 文件存在
-r read 文件存在且可讀
-s size 文件存在且文件大小不為0
-w write 文件存在且可寫
-x exexutable 文件存在且可執行
-L link 文件存在且為鏈接文件
f1 -nt f2 newer than 文件f1比文件f2新
f1 -ot f2 olderthan 文件f1比文件f2舊
-n not zero 字符串的長度不為0
-z zero 字符串的長度為0
s1 = s2   字符串1等於字符串2
s1 != s2   字符串1不等於字符串2
==/= equal 相等
!= not equal 不相等
> greater than 大於
>= greater equal 大於等於
< less than 小於
<= less equal 小於等於
&& and
|| or
! not

(())測試操作符

  • ((<測試表達式>))
    • 常用與計算
    • 對於整數的關系運算,也可以使用Shell的算術運算符(())
((3>2)) && echo 1 || echo 0
((3!=2&&5==5)) && echo 1 || echo 0

07-shell if條件測試和比較