shell脚本的条件测试与比较

条件测试方法
语法1:test <测试表达式>    
这是利用test命令进行条件测试表达式的方法。test命令和"<测试表达式>"之间至少有一个空格

语法2:[ <测试表达式> ]    
这是通过[]进行条件测试表达式的方法。和test命令用法相同,推荐此方法。[]的边界和内容至少有一个空格

语法3:[[ <测试表达式> ] ]    
这是通过[[ ]]进行条件测试表达式的方法。[[]]的边界和内容至少有一个空格

语法4: ((<测试表达式> ))    
这是通过(())进行条件测试表达式的方法,一般用于if语句里。(())前端不需要空格


语法1中的test命令和语法2中的[]是等价的。语法3中的[[]]为扩展的test命令,语法4中的(())命令常用于计算,建议在生产环境中使用相对友好的语法2,即中括号[]的语法
在双中括号[[]]中可以使用通配符(如*)等进行模式匹配,这是区别于其他几种语法的地方
&&、||、>、<等操作符可以应用到[[]]中,但不能应用于[]中,在[]中一般用-a、-o、-gt、-lt取代
对于整数的关系运算,也可以使用Shell的算术运算符(())

 
文件测试表达式
常用文件测试操作符 
-d 文件,directory    文件存在且为目录为真,即测试表达试成立
-f 文件,file    文件存在且为普通文件则为真
-e 文件, exist    文件存在则为真,-f,-e不辨别是目录还是文件
-r 文件,read    文件存在且可读则为真
-s 文件,size    文件存在且文件大小不为0为真
-w 文件,write    文件存在且可写则为真
-x 文件,executable    文件存在且可执行则为真
-L 文件,link    文件存在且为链接文件则为真   
f1 -nt f2,nt为newer than    文件1比文件2新则为真
f1 -ot f2,ot为older than    文件1比文件2旧则为真


常用字符串测试操作符
-n "字符串"    若字符串的长度不为0,则为真,n可理解为no zero
-z "字符串"    若字符串的长度为0,则为真
"串1"="串2"    若字符串1等于字符串2,则为真
"串1"!="串2"    若字符串1不等于字符串2,则为真
“=”两边需要有空格



整数二元比较操作符
[]及test使用的比较符号    (())和[[]]使用的比较符号     说明
-eq                         ==或=                         相等,equal
-ne                         !=                             不相等,not equal
-gt                          >                             大于,greater than
-ge                         >=                         大于等于,greater equal
-lt                         <                             小于,less than
-le                         <=                             小于等于,less equal



逻辑操作符
[]及test使用的比较符号    (())和[[]]使用的比较符号    说明
-a                          &&                         and,与,两端都为真,结果为真
-o                          ||                         or,或,两端有一个为真,结果为真
!                          !                         not,非,两端相反,结果为真

 

相关推荐