快捷搜索:
来自 67677新澳门手机版 2019-12-13 07:17 的文章
当前位置: 67677新澳门手机版 > 67677新澳门手机版 > 正文

shell测试命令test

1.4 使用建议

1.无论是[]还是[[]],都建议对其内变量、字符串使用双引号包围。换句话说,能做字符串相比较的时候,不要用数值相比。

例如:

name="Ma long"
[ $name = "Ma long" ]

地点的测量试验语句将报错,因为在变量替换阶段,$name被替换为Ma long,但它们从不在引号内,于是进行单词拆分,那就也正是于实行的是[ Ma long = "Ma long" ],明显那是谬误的语法。所以,建议加上双引号:

[ "$name" = "Ma long" ]

2.若是条件允许,提出将对数值的等值相比较改为字符串的可比。幸免变量为空时报错。

例如,变量a为空,下边包车型客车表达式是不没错。因为它被shell解析后一定于[ -eq 7 ],而那是大谬不然的语法。

[root@xuexi ~]# [ $a -eq 7 ]
-bash: [: -eq: unary operator expected

运用第生龙活虎种提出,将$a使用引号包围的话,依旧错的。因为被shell剖判后也便是[ "" -eq 7 ],字符串和数值不能相比。注意这里的报错和地方的错误新闻分歧样。

[root@xuexi ~]# [ "$a" -eq 7 ]
-bash: [: : integer expression expected

为此最佳的不二诀要是将它改为字符串来测验。

[root@xuexi ~]# [ "$a" = "7" ]

3.当变量可能为空的时候,猛烈提出在变量的底蕴上加上其它帮衬字符串。看过/etc/init.d下的本子的人一定都见过这种用法。

上边的言辞即便能科学测量试验。其实更安全的不二秘籍是选用上边包车型地铁款式:

[root@xuexi ~]# [ "a$a" = "a7" ]   # 判断a是否为7
[root@xuexi ~]# [ "a$a" = "a" ]    # 判断a是否为空
[root@xuexi ~]# [ ! -z "$a" -a "a$a" = "a7" ]  # a不为空且a=7时才为真

4.另外,在[]和[[]]中,每种地点都有空格。那不是书写建议,而是勉强要求的格式。

注:若你以为那篇文章尚可请点击下右下角的引荐,有了您的支撑技巧慰勉笔者更加大的创作热情,非常多谢!

]、[[ ]],shell测量检验命令test 本文目录: 1.1 条件表明式 1.2 test和[ ]的用法表达 1.3 [[ ]] 1.4 使用提出 test可用于测量检验表明式,...

test可用于测量试验表明式,扶持测量试验的约束包涵:字符串相比较,算术相比较,文件存在性、属性、类型等看清。举个例子,判别文件是不是为空、文件是还是不是留存、是不是是目录、变量是不是高于5、字符串是不是等于"longshuai"、字符串是还是不是为空等等。在shell中,大约全数的剖断都选择test完结。

1.2 test和[ ]的用法表明

test和[]的用法特别轻巧,但语法较复杂。它们是依靠参数的个数来成功测量试验的,所以测量检验的结果也依附于参数的个数。如下所述:

(1卡塔尔(英语:State of Qatar).不带任何参数时,直接回到false。

[[email protected] ~]# [ ];echo $?
1

(2卡塔尔(英语:State of Qatar).独有叁个参数时,测量试验表明式选用的是[ arg ],依照标准表达式的申明,仅当arg为非空时重回true。

[[email protected] ~]# test haha;echo $?
0

[[email protected] ~]# test $abcd;echo $?
1

[[email protected] ~]# test '';echo $?
1

(3卡塔尔(قطر‎.七个参数时,有三种情景:

①.第一个参数是单目条件运算符,富含文件类测量试验(如[ -e file1 ])和[ -n string ]、[ -z string ]。

②.首先个参数是"!"时,则只好是[ ! string ],等价于[ ! -n string ]。因为"!"是对法则表达式取反,所以当string为空时才true。

③首先个参数不是其他有效的操作符。将一向报错

(4卡塔尔(قطر‎.七个参数时,也可以有两种情状:

①.运用了眼睛运算符,如[ file1 -nt file2 ],[ init1 -eq int2 ]以及[ string1 != string2 ]。

②.接收了逻辑运算符,如[ string1 -a string2 ]、[ ! -e file ]、[ ! -z string ]、[ ! -n string ]。

③.使用了括号,则不能不是[ (string) ]。

(5卡塔尔(英语:State of Qatar).八个参数以上时,则管理措施参照下面。如[ ! string1 == string2 ]、[ string1 == string2 -o string1 == string3 ]。

无论是参数数量几个,简单的讲照旧对规范表明式的测验,所以最重大的或然法规表明式的逻辑结果。

1.3 [[ ]]

[[]]基本相当于[],但有一些效能写法更简明,且[[]]提供了[]所不富有的正则表明式相称。所以,[[]]的功用能够感觉是[]和expr命令的相加。

语法格式:

[[ conditional_expression ]]

除开以下非常表明的几项,其他用法等同[]。

(1卡塔尔(قطر‎.当条件表达式中央银行使的运算符是"=="或"!="时,该运算符的左侧会被充任pattern被相配,"=="表示能同盟成功则再次来到0,"!="则相反。但此刻只是通配符相配,不协助正则表明式相配。通配符蕴涵:"*"、"?"和"[...]"。

例如:

[root@xuexi ~]# [[ abc == a* ]];echo $?
0

[root@xuexi ~]# [[ abc == a*d ]];echo $?
1

(2卡塔尔.当条件表明式中应用的运算符是"=~"时,该运算符的侧面会被看作正则表达式的pattern被相配。

例如:

[root@xuexi ~]# [[ abc =~ aa* ]];echo $?
0

[root@xuexi ~]# [[ abc =~ aa.* ]];echo $?
1

(3卡塔尔.除了足以采纳逻辑运算符!和(卡塔尔(قطر‎,仍然为能够利用&&、||,分别表示逻辑与和逻辑或,等价于[]的"-a"和"-o"。但是[[]]不再协助"-a"和"-o"。

例如:

[root@xuexi ~]# [[ 3 -eq 3 && 5 -eq 5 ]];echo $? 
0

总的说来,除了形式相称和正则表明式相配时需求使用[[]],其他时候指出接受[ ]。

1.1 条件表明式

标准化表明式

意义

1.文书类检验,举个例子[ -e /tmp/a.log ]。如非极度表明,则怀有文件类操作都会追踪到软链接的源文件。

-e file

文本是还是不是存在(exist卡塔尔(英语:State of Qatar)

-f file

文件是还是不是存在且为普通文书(file卡塔尔(قطر‎

-d file

文件是还是不是留存且为目录(directory卡塔尔

-b file

文本是或不是留存且为块设备block device

-c file

文本是不是存在且为字符设备character device

-S file

文件是还是不是存在且为套接字文件Socket

-p file

文件是或不是留存且为命名管道文件FIFO(pipe卡塔尔国

-L file

文件是不是存在且是三个链接文件(Link卡塔尔(قطر‎

2. 文件属性检测,如test -r /tmp/a.log。如非非常表达,则有所文件类操作都会追踪到软链接的源文件。

-r file

文本是或不是存在且当前顾客可读

-w file

文件是不是留存且当前顾客可写

-x file

文本是不是留存且当前客商可进行

-u file

文本是或不是存在且设置了SUID

-g file

文件是还是不是存在且设置了SGID

-k file

文件是不是留存且设置了sbit(sticky bit卡塔尔

-s file

文本是还是不是存在且大小大于0字节,即用于检查实验文件是还是不是为非空白文件

-N file

文本是不是存在,且自上次read后是还是不是被modify

3. 五个文件之间的可比,如:test file1 -nt file2

file1 -nt file2

(newer than)判断file1是否比file2新

file1 -ot file2

(older than)判断file1是否比file2旧

file1 -ef file2

(equal file卡塔尔国判别file2与file2是还是不是为同一文件,可用在认清hard link的论断上。首要意义在认清,八个文件是还是不是均指向同一个分区上的同叁个inode

4. 五个整数之间的判别,帮助正负数,但不援救小数。比方test n1 -eq n2

int1 -eq int2

两数值十三分(equal卡塔尔(قطر‎

int1 -ne int2

两数值不等(not equal卡塔尔(قطر‎

int1 -gt int2

n1大于n2(greater than)

int1 -lt int2

n1小于n2(less than)

int1 -ge int2

n1大于等于n2(greater than or equal卡塔尔国

int1 -le int2

n1小于等于n2(less than or equal卡塔尔

5. 剖断字符串

-z string

(zero卡塔尔(قطر‎推断字符串是还是不是为空?若string为空字符串,则为true

string

-n string

看清字符串是还是不是非空?若string为空字符串,则false。注:-n可总结

string1 = string2

string1 == string2

string1和string2是或不是雷同。相似则赶回true。"=="和"="等价,但"="可移植性更加好

str1 != str2

str1是不是不对等str2,若不等,则赶回true

str1 > str2

str1假名逐条是还是不是高于str2,若高于,则赶回true

str1 < str2

str1字母逐个是不是低于str2,若小于,则赶回true

6.逻辑运算符,譬如:test -r filename -a -x filename

-a或&&

(and卡塔尔国两表达式同时为true时才为true。"-a"只可以在test或[]中使用,&&只能在[[]]中使用

-o或||

(or卡塔尔(英语:State of Qatar)两表达式任何两个true则为true。"-o"只好在test或[]中使用,||只能在[[]]中使用

!

对表明式取反

( )

用来转移表达式的先行级

 

1.1 条件表达式

原则表明式

意义

1.文件类检查评定,举个例子[ -e /tmp/a.log ]。如非特别表达,则持有文件类操作都会追踪到软链接的源文件。

-e file

文件是还是不是留存(exist)

-f file

文本是不是留存且为普通文书(file卡塔尔

-d file

文件是不是存在且为目录(directory卡塔尔(英语:State of Qatar)

-b file

文件是还是不是留存且为块设备block device

-c file

文本是或不是留存且为字符设备character device

-S file

文本是或不是存在且为套接字文件Socket

-p file

文件是还是不是存在且为命名管道文件FIFO(pipe卡塔尔

-L file

文本是还是不是留存且是叁个链接文件(Link卡塔尔(قطر‎

2. 文件属性检查实验,如test -r /tmp/a.log。如非非常表明,则怀有文件类操作都会追踪到软链接的源文件。

-r file

文本是不是留存且当前顾客可读

-w file

文本是还是不是留存且当前顾客可写

-x file

文件是或不是存在且当前顾客可实施

-u file

文件是还是不是留存且设置了SUID

-g file

文本是或不是留存且设置了SGID

-k file

文本是不是存在且设置了sbit(sticky bit卡塔尔

-s file

文件是还是不是留存且大小大于0字节,即用于检查实验文件是或不是为非空白文件

-N file

文本是不是留存,且自上次read后是不是被modify

3. 四个公文之间的比较,如:test file1 -nt file2

file1 -nt file2

(newer than)判断file1是否比file2新

file1 -ot file2

(older than)判断file1是否比file2旧

file1 -ef file2

(equal file卡塔尔(英语:State of Qatar)决断file2与file2是还是不是为同一文件,可用在认清hard link的论断上。重要意义在认清,四个文件是或不是均指向同二个分区上的同一个inode

4. 多个整数之间的决断,支持正负数,但不帮衬小数。比如test n1 -eq n2

int1 -eq int2

两数值特别(equal卡塔尔(英语:State of Qatar)

int1 -ne int2

两数值不等(not equal卡塔尔(قطر‎

int1 -gt int2

n1大于n2(greater than)

int1 -lt int2

n1小于n2(less than)

int1 -ge int2

n1大于等于n2(greater than or equal卡塔尔(قطر‎

int1 -le int2

n1小于等于n2(less than or equal卡塔尔(英语:State of Qatar)

5. 推断字符串

-z string

(zero卡塔尔(英语:State of Qatar)推断字符串是不是为空?若string为空字符串,则为true

string

-n string

看清字符串是不是非空?若string为空字符串,则false。注:-n可粗略

string1 = string2

string1 == string2

string1和string2是或不是风度翩翩致。相似则赶回true。"=="和"="等价,但"="可移植性越来越好

str1 != str2

str1是还是不是不对等str2,若不等,则赶回true

str1 > str2

str1假名逐个是不是高于str2,若高于,则赶回true

str1 < str2

str1字母顺序是或不是低于str2,若小于,则赶回true

6.逻辑运算符,比如:test -r filename -a -x filename

-a或&&

(and卡塔尔(英语:State of Qatar)两表明式同时为true时才为true。"-a"只可以在test或[]中使用,&&只能在[[]]中使用

-o或||

(or卡塔尔(قطر‎两表达式任何一个true则为true。"-o"只可以在test或[]中使用,||只能在[[]]中使用

!

对表明式取反

( )

用于转移表达式的优先级,为了防守被shell深入深入分析,应该加上反斜线转义( )

 

转发请声明出处:

1.2 test和[ ]的用法表达

test和[]的用法特简单,但语法较复杂。它们是依照参数的个数来完成测量试验的,所以测量试验的结果也依附于参数的个数。如下所述:

(1卡塔尔国.不带任何参数时,直接回到false。

[root@xuexi ~]# [ ];echo $?
1

(2卡塔尔国.唯有二个参数时,测量试验表明式采纳的是[ arg ],依据条件表明式的申明,仅当arg为非空时重回true。

[root@xuexi ~]# test haha;echo $?
0

[root@xuexi ~]# test $abcd;echo $?
1

[root@xuexi ~]# test '';echo $?
1

(3卡塔尔(英语:State of Qatar).五个参数时,有两种状态:

①.第二个参数是单目条件运算符,包罗文件类测量试验(如[ -e file1 ])和[ -n string ]、[ -z string ]。

②.率先个参数是"!"时,则一定要是[ ! string ],等价于[ ! -n string ]。因为"!"是对准则表明式取反,所以当string为空时才true。

③首先个参数不是别的有效的操作符。将平素报错

(4卡塔尔(英语:State of Qatar).三个参数时,也是有二种意况:

①.用到了双眼运算符,如[ file1 -nt file2 ],[ init1 -eq int2 ]以及[ string1 != string2 ]。

②.应用了逻辑运算符,如[ string1 -a string2 ]、[ ! -e file ]、[ ! -z string ]、[ ! -n string ]。

③.使用了括号,则只可以是[ (string) ]。

(5卡塔尔(英语:State of Qatar).三个参数以上时,则管理格局参照下面。如[ ! string1 == string2 ]、[ string1 == string2 -o string1 == string3 ]。

无论参数数量几个,一句话来讲仍旧对规格表达式的测量试验,所以最注重的或许准则表明式的逻辑结果。

shell测量试验命令test、[ ]、[[ ]],shell测量试验命令test


正文目录:

1.1 条件表明式

1.2 test和[ ]的用法表达

1.3 [[ ]]

1.4 使用提议


test可用于测验表明式,援助测量试验的范围包括:字符串比较,算术比较,文件存在性、属性、类型等决断。譬如,判别文件是或不是为空、文件是或不是存在、是还是不是是目录、变量是或不是超越5、字符串是或不是等于"longshuai"、字符串是还是不是为空等等。在shell中,差相当少具备的剖断都接收test实现。

其中[]全盘等价于test,只是写法不相同。双中括号[[]]骨干相当于[],它协助更加的多的准绳表明式,还允许在双中括号内使用逻辑运算符"&&"、"||"、"!"和"(卡塔尔国",但那个应用单中括号都能兑现,只不过多写多少个单中括号而已。单中括号[]爱莫能助贯彻的意义是正则表达式相配,而[[]]能够完结。因而,在能使用单中括号的情状下,不需求思量动用双中括号。

test、[ ]以及[[ ]]都使用法则表达式来成功测量试验。test和[]用法虽轻易,但语法比较复杂,反而是[[]]的语法较为轻巧。但无论怎样,先表达条件表达式。

本文由67677新澳门手机版发布于67677新澳门手机版,转载请注明出处:shell测试命令test

关键词: