Linux系统下Shell条件语句之组合测试表达式

首先,我来帮大家回忆下Shell的测试表达式类型

1.整数测试表达式

[ TYPE [option] TYPE ]

其中option有以下几种选项:

    -eq : 判断相等

    -ne :不等

    -gt :大于

    -lt :小于

    -ge :大于等于

    -lt :小于等于

2.字符串测试表达式

    == :判断是否相同

    != :不同

    \> :按照ASCII码比较是否大于

    \< :按照ASCII码比较是否小于

3.文件测试表达式

    -e :文件是否存在

    -f :是否是普通文件

    -d :是否为目录

    -w :是否可写

    -r :是否可读

    -x :是否可执行

那么,来说下我们今天的主角组合测试表达式:

组合测试表达式类型如下两种写法:

    1. [ expression [option] expression ]

        -a :全拼为and,也就是两个表达式的交集为真时返回真,假时返回假

        -o :全拼为or,也就是两个表达式的并集,两个表达式中一个为真时返回真,全部为假时返回假

    

    2.[ expression ] [option] [ expression ]

    

        &&:两个表达式的交集为真时返回真,假时返回假

        ||:两个表达式的并集,两个表达式中一个为真时返回真,全部为假时返回假

还有一个关键字 !:表示非,下面针对实际列子来作分析:

列如:  test.sh文件

  1 #!/bin/bash
  2 #
  3 if [ $# -gt 3 -a  $# -lt 6 ];then
  4    echo 'ok'
  5 else
  6    echo 'no'
  7 fi

上面这个是一个Shell脚本,用来判断执行该文件时所带参数的个数,如果大于3并且小于6时输出'ok',反之输出'no'

我们改造一下这个脚本:

  1 #!/bin/bash
  2 #
  3 if [ $# -gt 3 -a  $# -lt 6 ];then
  4    echo 'ok'
  5 else
  6    echo 'no'

  7 fi

我们在第一个表达式前面加上 '!',那么执行./test.sh 1 2 3 4 5 6 时,输出结果是'ok'还是'no'?

如果你的答案是'ok',那么请一定要看如下内容,如果你的答案是'no',那么你也可以回顾下知识点

我们来说下大家错误的理解:

            如果小于等于3或者大于6时输出'ok',反之输出'no'

很多人思考错误的原因是把'!'当成了整个表达式的作用域,而事实上我们是组合测试表达式,'!'只对第一个表达式起了作用

我们正确的理解:

            如果小于等于3并且小于等于6时输出'ok',反之输出'no'

现在我们把脚本改为实现:如果小于等于3或者大于6时输出'ok',反之输出'no':

  1 #!/bin/bash
  2 #
  3 if [  $# -gt 3 -o  ! $# -lt 6 ];then
  4    echo 'ok'
  5 else
  6    echo 'no'

  7 fi

注意,将option换成了 -o 代表或者,后面的表达式用'!'取反

好了,通过今天的列子有没有对组合测试表达式理解呢?





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值