码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本的条件测试与比较

时间:2018-01-26 15:48:48      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:.sh   工作   相等   帮助   括号   一个   连接   man   测试文件   

条件测试语法:

语法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 && echo good || echo bad
good

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

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

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

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

root@ubuntu:/home/xpg# [ -f /home/xpg/match.sh ] && echo 1 
1
root@ubuntu:/home/xpg# [ -f /home/xpg/match.sh ] || echo 0   
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不等时为真 
-n str1        当串的长度大于0时为真(串非空) 
-z str1        当串的长度为0时为真(空串) 
str1           当串str1为非空时为真
!str2                 当子串为空时为真
int1 -eq int2    两数相等为真 
int1 -ne int2    两数不等为真 
int1 -gt int2    int1大于int2为真 
int1 -ge int2    int1大于等于int2为真 
int1 -lt int2    int1小于int2为真 
int1 -le int2    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 ] && echo 1 || echo 0
0

生产的启动脚本 

例如:

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


写出简单高效的测试文件

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

root@ubuntu:/home/xpg# [ -x xpg ] && echo 1
root@ubuntu:/home/xpg# [ -x xpg ] || echo 1  
1


shell脚本的条件测试与比较

标签:.sh   工作   相等   帮助   括号   一个   连接   man   测试文件   

原文地址:http://blog.51cto.com/11726212/2065465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!