by francis_hao oct 1,2017
本文摘錄自bash的man手冊
條件表示式是由復合命令 [[ 或內建命令 test 和 [ 使用的,用於測試檔案屬性和字串或數值比較。表示式形式如下表所示,如果其中的file形式為/dev/fd/n,那麼將測試檔案描述符n,如果file是/dev/stdin, /dev/stdout 或 /dev/stderr。那麼將測試檔案描述符0,1和2。除非有其他指定,否則,測試乙個連線都是測試其指向的檔案,而不是連線本身。
表示式說明
檔案屬性測試
-a file
如果file存在則為真
-b file
如果file存在且為塊檔案則為真
-c file
如果file存在且為字元檔案則為真
-d file
如果file存在且是目錄則為真
-e file
如果file存在則為真
-f file
如果file存在且為普通檔案則為真
-g file
如果file存在且置位設定-組id則為真,見參考第4.4、12.3節
-h file
如果file存在且為符號連線則為真
-k file
如果file存在且其粘性位置位則為真,參考man chmod
-p file
如果file存在且為命令管道(fifo)則為真
-r file
如果file存在且可讀則為真
-s file
如果file存在且檔案長度大於0則為真
-t fd
如果檔案描述符fd開啟且指向為終端則為真
-u file
如果file存在且設定-使用者-id置位則為真,見參考第4.4節
-w file
如果file存在且可寫則為真
-x file
如果file存在且可執行
-g file
如果file存在且由有效組id擁有則為真,見參考第4.4節
-l file
如果file存在且為符號連線則為真
-n file
如果file存在且在上次讀後有修改(modified)則為真
-o file
如果file存在且由有效使用者id擁有則為真,見參考第4.4節
-s file
如果file存在且是乙個套接字則為真
file1 -ef file2
如果file1和file2指向同乙個裝置的inode則為真
file1 -nt file2
如果file1比file新(modified),或者file1存在file2不存在在為真
file1 -ot file2
如果file1比file舊(modified),或者file1存在file2不存在在為真
shell相關
-o optname
如果shell選項optname使能則為真,參考內建指令set的-o選項
-v varname
如果shell變數varname被設定則為真
字串測試
-z string
如果string長度為0則為真
string
-n string
如果string長度不為0則為真
string1 == string2
string1 = string2
如果string1和string2相等則為真,=只應由test使用
string1 != string2
如果字串不相等則為真
string1 < string2
如果按字典序string1在string2之前則為真
string1 > string2
如果按字典序string1在string2之後則為真
數值測試
arg1 op arg2
op是-eq, -ne, -lt, -le, -gt, 或 -ge的其中之一,數值可正可負。
[[expression]]
根據條件表示式expression的結果返回0或1。在[[和]]中,字分割和路徑擴充套件不會執行,其他擴充套件都會執行,條件操作符,像-f,必須是非引用的,以被識別為操作符。《和》操作符使用當前的locale進行字典排序。
在使用==和!=操作符時,右側的運算元可以是乙個模式(pattern matching),如果要匹配這個模式本身,使用引號引起來即可。
另乙個可用的二元運算元,=~,與==和!=的優先順序相同。當使用它時,右側的運算元被認為是乙個擴充套件的正規表示式(見參考),如果使能shell的選項nocasematch,那麼表示式對大小寫不敏感。
expression可以使用以下操作符進行結合,優先順序由高到低排序
操作符說明
( expression )
用來改變優先順序
! expression
expression的結果取反
expression1 && expression2
邏輯與,如果expression1足夠說明整個表示式的真假,那麼expression2不會被求值
expression1 || expression2
邏輯或,如果expression1足夠說明整個表示式的真假,那麼expression2不會被求值
testexpr
[expr]
根據條件表示式expr的結果返回0或1,每個操作符和運算元必須是分開的引數,test不接受任何選項,甚至表示引數結束的--也不接受。
表示式可以由以下操作符進行結合,優先順序由高到低排序
操作符說明
! expr
expr的結果取反
( expr )
用來改變優先順序
expr1 -a expr2
邏輯與expr1 -o expr2
邏輯或《和》操作符使用ascii進行字典排序。
w.richard stevens, stephen a.rago著 戚正偉 張亞英 尤晉元譯 《unix環境高階程式設計(第3版)》北京:人民郵電出版社 2014.6
posix.2 正規表示式
man sh
shell 條件表示式test
一 條件測試 測試語句 在bash的各種流程控制結構中通常要進行各種測試,然後根據測試結果執行不同的操作,有時也會通過與if等條件語句相結合,讓我們可以方便的完成判斷。格式1 test 測試表示式 格式2 條件表示式 格式3 條件表示式 說明 格式1和格式2是等價的。格式3為擴充套件的test命令,...
linux中shell條件表示式總結
1.字串比較 取反 n str 字串 str 是否不為空 z str 字串 str 是否為空 str1 str2 str1是否與 str2 相同 str1 str2 str1是否與 str2 不同 2.數值大小比較 int1 eq int2 等於 int1 le int2 小於等於 int1 ge ...
Shell 條件表示式的正則匹配
shell 程式設計中,我們可以使用雙中括號運算子 和 來判斷字串是否匹配給定的正規表示式,例如匹配以 lvlv 結尾的字串 filelist lvlvcheck dablelvlv checklvlv forfile in filelist doif file lvlv then echo fil...