Shell编程 流程控制——变量表达式
test
test是Shell程序中的一个表达式,通常用在流程控制for、while、until、if等结构中,用test命令去判断文件的存在与性质,变量的相互关系
语法:
test<表达式>
如果<表达式>成立,test返回0,反之,test返回一个非0值
test在以下4中情况中使用
字符串比较 两个数值的比较 逻辑操作,可以进行and/or,与其他条件联合使用 文件惭怍,例如文件是否存在及文件的状态等
字符串比较
测试字符串长度是否等于0
-z <"字符串">
测试字符串长度是否大于0
-n <"字符串">
![](https://img2018.cnblogs.com/blog/1203415/201903/1203415-20190326104620540-725063306.png)
比较两个字符串是否相同,相同则为"是"。等号两边要有空格,判断相等时也可以用==
<字符串1> = <字符串2>
![](https://img2018.cnblogs.com/blog/1203415/201903/1203415-20190326104842961-1614166325.png)
比较两个字符串是否不相同,!=则为"是"。等号两边要有空格
<字符串1> != <字符串2>
![](https://img2018.cnblogs.com/blog/1203415/201903/1203415-20190326105017623-1090063447.png)
$?
如果上一条指令执行成功,则$?=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