《跟老男孩学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:

[[email protected] ~]# 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编程实战》这本书时的笔记,如有任何版权问题,请联系留言。

时间: 2024-07-31 14:32:35

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

跟老男孩学Linux运维:Web集群实战优惠预售中

跟老男孩学Linux运维:Web集群实战即将出版 感谢小伙们这么多年对老男孩的持续关注.支持和理解, 为此,我们特别组织预售活动,以网内最低价回馈小伙伴们, 为大家争取的特殊优惠加签名仅限前500名,优惠价预计7折左右! 还剩不到50个名额,大家抓紧了. 1.老男孩内部预售活动报名说明及缴费地址 http://www.huodongxing.com/event/8325097592500  2.京东商城预售地址: http://item.jd.com/11891124.html

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

跟老男孩学linux运维一书征求大家给建议选择!

跟老男孩学linux运维一书即将出版,征求下大家的建议和选择! 出版社的同学非常辛苦,现在出版社给我们设计了跟老男孩学linux运维一书封面 两个封面,大家觉得哪个好就评论下,一定要二选一啊! 选哪个,说下选择的理由,谢谢大家! 加入本书提供的两个QQ交流群226199808和339128815 (作者和读者交流答疑用) 届时可获得通过抽奖免费获得若干本新书的机会,. 封面1: 封面2:

提供跟老男孩学Linux运维Shell编程实战的第四、第五章源代码

第四章是讲Shell变量知识进阶与实践: 第五章是讲变量的数值计算实践: 附件中包括源码,请下载. 该两章在学习时要注意相关事项: 1.注意标点符号的使用:例如,单引号,反引号,双引号等: 2.注意该要留空格的留空格: 3.注意特殊变量的作用: 4.内置变量的使用: 5.算术运算任的使用.

《跟老男孩学Linux运维》

Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与负载均衡 Keepalived 高可用集群 Memcached 应用 Nagios 应用

老男孩教育Linux运维课程是如何讲解MySQL数据库的?

老男孩专业DBA课程表如下: http://oldboy.blog.51cto.com/2561410/1951684 本博文课表即将出书<跟老男孩学习Linux运维:MySQL数据库实战>,敬请关注.