Shell编程 流程控制——变量表达式

test

test是Shell程序中的一个表达式,通常用在流程控制for、while、until、if等结构中,用test命令去判断文件的存在与性质,变量的相互关系

语法:

test<表达式>

如果<表达式>成立,test返回0,反之,test返回一个非0值

test在以下4中情况中使用

字符串比较
两个数值的比较
逻辑操作,可以进行and/or,与其他条件联合使用
文件惭怍,例如文件是否存在及文件的状态等

字符串比较

测试字符串长度是否等于0

-z <"字符串">

测试字符串长度是否大于0

-n <"字符串">

 


比较两个字符串是否相同,相同则为"是"。等号两边要有空格,判断相等时也可以用==

<字符串1> = <字符串2>

 


比较两个字符串是否不相同,!=则为"是"。等号两边要有空格

 

<字符串1> != <字符串2>

 

$?

如果上一条指令执行成功,则$?=0反之则是一个非0数

数字比较

常用于数值比较的<表达式>有:

<数值表达式1><算符><数值表达式2>(算符两边要有空格)

-eq: 两者相等

-ne: 两者不相等

-lt: 前者小于后者

-le: 前者小于或等于后者

-gt: 前者大于后者

-ge: 前者大与或等于后者

wang@wang-Lenovo-ideapad-100S-14IBR:~$ int1=1234
wang@wang-Lenovo-ideapad-100S-14IBR:~$ int2=01234
wang@wang-Lenovo-ideapad-100S-14IBR:~$ test $int1 -eq $int2
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
0
wang@wang-Lenovo-ideapad-100S-14IBR:~$ test $int1 -eq $3456
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
1
wang@wang-Lenovo-ideapad-100S-14IBR:~$ test $int1 -lt $3456
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
1

 

文件操作

文件测试表达式通常是为了测试文件的操作逻辑,测试符号如下

-e: 对象是否存在,存在则返回值为0

-d: 对象存在且为目录,存在则返回值为0

-f:对象存在且为文件,则返回值为0

-L:对象存在且为符号连接,则返回值为0

-r:对象存在且可读,则返回值为0

-s:对象存在且长度非0,则返回值为0

-w:对象存在且可写,则返回值为0

-x:对象存在且可执行,则返回值为0

!:测试条件的否定,与上述的符号用空格分隔开。

wang@wang-Lenovo-ideapad-100S-14IBR:~$ test -d /root
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
0
wang@wang-Lenovo-ideapad-100S-14IBR:~$ test -d /root1da
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
1

逻辑测试

!<表达式>: <表达式>不成立

<表达式1> -a <表达式2>: <表达式1>与<表达式2>同时成立

<表达式1> -o <表达式2>: <表达式1>或<表达式2>成立

wang@wang-Lenovo-ideapad-100S-14IBR:~$ test -r /home/lisi/bucunzai -o -d /home
wang@wang-Lenovo-ideapad-100S-14IBR:~$ echo $?
0
posted @ 2019-03-22 11:52  晓风微微  阅读(246)  评论(0编辑  收藏  举报