首页 > 代码库 > 《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

 本文的知识点是关于shell脚本的条件测试的相关内容。

   通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在、是否为文件或目录、是否

具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的。接下来我们进入正题:shell脚本的条件测试。

1.在bash编程中,条件测试常用的语法形式如下表:

技术分享

提示:

  • 语法1中的test命令和语法2中的[]是等价的。语法3中的[[]]双中括号为扩展的test命令。

    语法4中的(())常用于计算。

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

  • &&、||、>、<等操作符可以应用于双中括号{[[]]中,但不能应用于单中括号[]中,在[]中一般用-a、-o、

    -gt(用于整数)、-lt(用于整数)代替上述操作符。

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


下面具体介绍一下常用条件测试的语法:

(1)test条件测试的简单语法及示例:

test条件测试的语法格式:test 条件表达式

例1:测试文件file是否存在:

test -f file && echo true || echo false 

==>测试file文件是否存在,,如果存在则输出true,否则输出false

例2:测试字符串的长度是否为0:

[root@www ~]# test -z "XiaoYu" && echo true || echo false
false

==>如果测试字符串的长度为0,则表达式成立,因为测试的字符串为XiaoYu,不为0,则表达式的结果为false。

(2)[ ]中括号条件测试语法及示例

语法格式:[ 条件测试表达式 ]   ==>中括号两端要有空格

例1:测试file文件是否存在:

[ -f file ] && echo 1 || echo 2 ==>测试文件file是否存在,存在返回1,不存在返回0。

(3)[[ ]]双中括号条件测试语法及示例

语法格式:[[ 条件测试表达式 ]]  ==>双中括号里的两端也要有空格

例1:[[ -f file ]] && echo 1 || echo 0 ==>测试文件file是否存在,如存在则返回1,不存在返回0。

提示:

[[ ]]中,可以使用通配符等进行模式匹配,并且&&、||、>、<等操作符可以应用在[[ ]]中,但不能应用于[ ]中,

在[ ]中一般使用-a、-o、-gt(用于整数)、-lt(用于整数)等操作符代替上文提到的用于[[ ]]中的符号。

提示:

   虽然[[]]的应用场景不多,但在[[]]通配符匹配的场景下,其他的测试表达式无法替代,如果需要通配符匹配

或正则匹配就用[[]]。

2.文件测试表达式:

常用的文件测试操作符:

技术分享

提示:

1.测试文件的读、写、可执行等属性,不光是根据文件属性rwx的标识来判断,还要看当前执行测试的用户是否

真的可以按照对应的权限操作该文件。

2.用[ ]中括号测试变量时,如果被测试的对象是变量,则需要加双引号。

3.特殊条件测试表达式案例

以下写法适用于所有的条件测试表达式,是工作中比较常用的替代if语句的方法。

例1:当条件1成立时,同时执行命令1、命令2、命令3:

技术分享

上面的判断,相当于下面的if语句的效果:

技术分享

4.字符串测试表达式

字符串测试操作符:

技术分享

5.整数二元比较操作符

整数二元比较操作符使用参考:

技术分享

提示:

(1)“=”和“!=”也可以在[ ]中作比较使用,但在[ ] 中使用包含“>”和“<”的符号时,需要转义,有时

不转义,虽然语法不会报错,但是结果可能不对。

(2)也可以在[[]]中使用包含“-gt”和“lt”的符号,但是不建议这样使用。

(3)比较符号两端也要有空格。

(4)条件测试表达式,注意普通字符比较常用字符串比较的方法,即加双引号比较,而不是使用整数比较的语法,

     整数比较容易出错,除非确定是整数。

推荐使用[]单中括号的方法进行整数比较。

着重说明:虽然提示中的方法也可使用,但建议按照上述使用参考使用。

 6.逻辑操作符

技术分享

提示:

(1)“-a”和“-o”逻辑操作符需要用于[]中。

(2)“&&”和“||”逻辑操作符号可用于[[]]和(())中,也可以在外部连接多个[]。

(3)注意,在[]和[[]]的两端,必须要有空格,但是对于(())不需要。

总结:

测试表达式test、[]、[[]]、(())的区别总结:

技术分享







以上为本人在读《跟老男孩学Linux运维之shell编程实战》这本书时的笔记,如有任何版权问题,请联系留言。



本文出自 “shayatou_1990” 博客,请务必保留此出处http://shayatou1990.blog.51cto.com/12806916/1919584

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试