1. 程式人生 > >shell指令碼的條件測試

shell指令碼的條件測試

出處:《跟老男孩學Linux:Shell程式設計實戰》

目錄

邏輯操作符

檔案測試表達式

常用的檔案測試操作符

常用的檔案測試操作符 說明
-d 檔案,d的全拼為directory 檔案存在且為目錄則為真
-f 檔案,f的全拼為file 檔案存在且為普通檔案則為真
-e 檔案,e的全拼為exist 檔案存在則為真
-r 檔案,r的全拼為read 檔案存在且可讀則為真
-s 檔案,s的全拼為size 檔案存在且檔案大小不為0則為真
-w 檔案,w的全拼為write 檔案存在且可寫則為真
-x 檔案,x的全拼為executable 檔案存在且可執行則為真
-L 檔案,L的全拼為link 檔案存在且為連結檔案則為真
f1 -nt f2,nt的全拼為newer than 檔案f1比檔案f2新則為真。根據檔案的修改時間來計算
f1 -ot f2,ot的全拼為older than 檔案f1比檔案f2舊則為真。根據檔案的修改時間來計算

字串測試操作符

字串測試操作符 說明
-n "字串" 若字串長度不為0,則為真
-z "字串" 若字串長度為0,則為真
"串1"  =  "串2" 若字串1等於字串2,則為真。可使用 == 代替 =
"串1"  !=   "串2" 若字串1不等於字串2,則為真。可使用 !== 代替 !=
  • 對於字串的測試,一定要將字串加雙引號之後再進行比較。如[ -n "$myvar" ],特別是使用[]的場景。
  • 比較符號(例如 = 和 != )的兩端一定要有空格。
  • "!="和"="可用於比較兩個字串是否相同

整數二元比較操作符

在[ ]以及test中使用的比較符 在(( ))和[[ ]]中使用的比較符 說明
-eq == 或 = 相等,全拼為equal
-ne != 不等,全拼為not equal
-gt > 大於,全拼為greater than
-ge >= 大於等於,全拼為greater equal
-lt < 小於,全拼為less than
-lt <= 小於等於,全拼為less equal
  • “=”和“!=”也可在[]中做比較使用,但在[]中使用包含“>”和“<”的符號時,需要用反斜線轉義,有時不轉義雖然語法不會報錯,但是結果可能會不對。
  • 也可以在[[]]中使用包含“-gt”和“-lt”的符號,但是不建議這樣使用。
  • 比較符號連段也要有空格。

邏輯操作符

在[ ] 和test中使用的操作符 在(( ))和[[ ]]中使用的操作符 說明
-a && and,與
-o || or,或
! ! not,非
  • 邏輯操作符前後的表示式是否成立,一般用真假來表示。
  • “!”的中文意思是反,即與一個邏輯值相反的邏輯值。
  • -a的中文意思是“與”,前後兩個邏輯值都為“真”,綜合返回值才為“真”,反之為“假”。
  • -o的中文意思是“或”,前後連個邏輯值只要有一個為“真”,返回值就為“真”。
  • 連線兩含[ ]、test或[[ ]]的表示式可用 && 或 ||

不同符號測試表達式[ ]、[[ ]]、(( ))、test的區別

測試表達式符號 [ ] test [[ ]] (( ))
邊界是否需要空格 需要 需要 需要

不需要

有空格不報錯

邏輯操作符 -a、-o、! -a、-o、! &&、||、! &&、||、!
整數比較操作符 -eq、-gt、-ge、-lt、-le -eq、-gt、-ge、-lt、-le

-eq、-gt、-ge、-lt、-le

=、>、>=、<、<=

=、>、>=、<、<=
字串比較操作符 =、==、!= =、==、!= =、==、!= =、==、!=
是否支援萬用字元匹配 支援

- 出處:《跟老男孩學Linux:Shell程式設計實戰》