shell中的條件表示式

2022-08-30 12:57:12 字數 3108 閱讀 8846

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...