微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

shell脚本的条件测试与比较

条件测试语法:

语法1:test <测试表达式> 这是利用test命令进行条件测试表达式的方法

语法2:[ <测试表达式> ]:这是通过单括号进行条件测试表达式的方法,和test命令的用法相同,推荐使用的

语法3:[[ <测试表达式> ]]:这是通过[[]]进行条件测试表达式的方法,是比test和[]更新的语法格式

语法4:((<c测试表达式>)):这是通过(())进行条件表达式的方法,一般用于if语句里


针对上面的说明:

语法1和语法2是相同的,语法3是test的扩展。推荐使用语法2

在[[]]中可以使用通配符等进行模式匹配,这就是区别与其他几种语法格式的地方

&&,||,>,<等操作符可以应用与[[]]中,但不能应用与[]中,在[]中一般用-a,-o,-get(用于整数),-lt(用于整数)代替上面的操作符。

对于整数的关系运算符,也可以使用算术运算符(())

root@ubuntu:/home/xpg#test-f/home/xpg/match.sh&&echogood||echobad
good

范例:使用-z测试一个字符串,如果字符串的长度为0则返回真,-n相反

root@ubuntu:/home/xpg#char=oldboy
root@ubuntu:/home/xpg#test-z"$char"&&echo1||echo0
0
root@ubuntu:/home/xpg#char=
root@ubuntu:/home/xpg#test-z"$char"&&echo1||echo0
1
root@ubuntu:/home/xpg#

[ ]和test性质一样,在工作中主要使用这种。

root@ubuntu:/home/xpg#[-f/home/xpg/match.sh]&&echo1||echo0
1
上下的性质是一样的

root@ubuntu:/home/xpg#[-f/home/xpg/match.sh]&&echo1
1
root@ubuntu:/home/xpg#[-f/home/xpg/match.sh]||echo0
root@ubuntu:/home/xpg#

由于test 表达式 和 [ ]是一样的,可以使用man test查看帮助的


root@ubuntu:/home/xpg# [[ -f /home/xpg/match.sh ]] && echo 1 || echo 1

1

[[ ]]和[ ]的区别在于[[ ]]可以使用通配符等进行模式匹配,并且&&,||,>,<等操作符可以应用在[[ ]]中,但不能应用在[ ],在[ ]中一般使用-a,-o,-gt,-lt代替上面的[[ ]].


文件测试表达式


先补充一点:

str1!=str2     当串str1和str2不等时为真
-nstr1       当串的长度大于0时为真(串非空)
-zstr1       当串的长度为0时为真(空串)
str1        当串str1为非空时为真
!str2当子串为空时为真
int1-eqint2    两数相等为真
int1-neint2    两数不等为真
int1-gtint2    int1大于int2为真
int1-geint2    int1大于等于int2为真
int1-ltint2    int1小于int2为真
int1-leint2    int1小于等于int2为真

-d :文件 文件存在且为目录则是真

-f :文件 文件存在并且为普通文件为真

-e :文件 文件存在则为真,和上面-d,-f的区别是不分辨是目录还是文件

-r :文件 文件存在并且可读则为真

-s :文件 文件存在并且大小不为0则为真

-w :文件 文件存在并且可写为真

-x :文件 文件存在并且可执行为真

-L :文件 文件存在并且为连接文件为真

f1 -nt f2, nt的全拼为newer than 文件f1比文件f2新则为真。

f1 -ot f2;-ot的全拼为older than 文件f1比文件f2旧则为真

使用-e和-d结合使用:
root@ubuntu:/home/xpg#[-e/home/xpg/match.sh-a-d/home/xpg/match.sh]&&echo1||echo0
0

生产的启动脚本

例如:

root@ubuntu:/home/xpg#[-x/usr/bin/apache2]||exit5#简单的判断,如果这个文件不存在或者不能被执行,返回exit5
exit
xpg@ubuntu:~$echo$?
5
xpg@ubuntu:~$


写出简单高效的测试文件

在做测试判断的时候,不一定非要按照“前面的操作成功了如何,否则如何”的方法,有时候直接部分判断,有时候看起来更加简单。

root@ubuntu:/home/xpg#[-xxpg]&&echo1
root@ubuntu:/home/xpg#[-xxpg]||echo1
1

原文地址:https://www.jb51.cc/bash/388890.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐