Shell腳本的if語句、循環語句中都會有一個邏輯判斷式。邏輯判斷式用於各種條件的判斷,除非程序是流水賬,否則是一定會用到邏輯判斷的,可見其重要性。
Shell的邏輯判斷,我目前所知共有兩種:
1、test命令,可以結合命令執行結果變量($?)或者&&以及||來實現不同條件走不同分支
2、[ 條件判斷 ],這種方式常用於if語句和while語句中
參數 |
功能 |
說明 |
-e |
文件是否存在 |
對文件類型的判斷 test -e file |
-f |
判斷文件名是否存在且爲文件 |
|
-d |
判斷文件名是否存在且爲目錄 |
|
-r |
判斷對該文件是否有“可讀”權限 |
對文件權限的檢測 test -r file |
-w |
判斷對該文件是否有“可寫”權限 |
|
-x |
判斷對該文件是否有“可執行”權限 |
|
-nt |
(newer than)判斷file1是否比file2新 |
兩個文件之間的比較 test file1 -nt file2 |
-ot |
(older than)判斷file1是否比file2舊 |
|
-ef |
判斷file1和file2是否爲同一文件 |
|
-eq |
兩數值是否相等(equal) |
兩個整數之間的比較 test n1 -eq n2 |
-ne |
兩數值是否不等(not equal) |
|
-gt |
n1大於n2(greater than) |
|
-lt |
n1小於n2(less than) |
|
-ge |
n1大於等於n2(greater than or equal) |
|
-le |
n1小於等於n2(less than or equal) |
|
test -z string |
判斷字符串是否爲空,如果爲空,則爲true |
字符串的判斷 對參與判斷的字符串,最好加上""",如"$var"這樣的格式,不然會產生“參數過多”的錯 判斷相等的時候,"="和"=="是等效的 |
test -n string |
判斷字符串是否爲空,如果爲空,則返回false |
|
test str1=str2 |
判斷str1是否等於str2,若相等,則返回true |
|
test str1!=str2 |
判斷str1是否不等於str2,若相等,則返回false |
|
-a |
兩個條件同時成立則爲真 test -r file1 -a test -x file2 |
多重條件的判斷 |
-o |
兩個條件任意一個成立則爲真 test -r file1 -a test -x file2 |
|
! |
對測試條件結果取反 test ! -x file |
關於&&和||
這個是用於聯合兩個命令的,邏輯與(&&)和邏輯或(||),在if和循環的判斷式中的意義與C語言中是一樣的。
邏輯與:表示兩個同時爲真,則改表達式爲真,否則爲假。
邏輯或:表示任意一個爲真,則表達式爲真,否則爲假。
但是在test命令中,這兩個操作符的意義有所 不同
命令格式
|
解釋 |
cmd1 && cmd2 |
若cmd1執行完畢且正確執行($?=0),則開始執行cmd2
若cmd1執行完畢且返回出錯($?≠0),則不執行cmd2
|
cmd1 || cmd2
|
若cmd1執行完畢且正確執行($?=0),則不執行cmd2
若cmd1執行完畢且返回出錯($?≠0),則執行cmd2
|