shell指令碼的條件測試
阿新 • • 發佈:2019-01-26
出處:《跟老男孩學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程式設計實戰》