Shell腳本學習之邏輯判斷

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

判斷file1file2是否爲同一文件

-eq

兩數值是否相等(equal

兩個整數之間的比較

test n1 -eq n2

-ne

兩數值是否不等(not equal

-gt

n1大於n2greater than

-lt

n1小於n2less than

-ge

n1大於等於n2greater than or equal

-le

n1小於等於n2less 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

這是一些常用的test命令的參數,“[]”的用法與test命令類似,只要去掉test這個命令就行,其餘不變。


關於&&和||

這個是用於聯合兩個命令的,邏輯與(&&)和邏輯或(||),在if和循環的判斷式中的意義與C語言中是一樣的。

邏輯與:表示兩個同時爲真,則改表達式爲真,否則爲假。

邏輯或:表示任意一個爲真,則表達式爲真,否則爲假。


但是在test命令中,這兩個操作符的意義有所 不同

命令格式
解釋
cmd1 && cmd2
若cmd1執行完畢且正確執行($?=0),則開始執行cmd2
若cmd1執行完畢且返回出錯($?≠0),則不執行cmd2
cmd1 || cmd2
若cmd1執行完畢且正確執行($?=0),則不執行cmd2
若cmd1執行完畢且返回出錯($?≠0),則執行cmd2

如果是多於兩個命令的聯合,執行結果會不斷的往後傳,影響後面的判斷。同時因爲$?只有一個,所以這個影響有個就近原則。

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