2-5 条件测试-字符串比较

        书接上文,这节我们来看一下条件测试中对字符串的比较。在其他的高级编程语言中,我们都知道对字符串的处理是一个避不开的话题。其实在shell中我们也需要对字符串做处理。我们来看一下对字符串做比较的比较基础的用法。

if-then

if condition
then
    commands
fi

               接下来给大家做个演示。

vim condition_string.sh

#!/bin/bash
#

var1="xiaoqiang"
var2="wangcai"

if [ $var1 = $var2 ];then
        echo "$var1 is equal to $var2"
else
        echo "$var1 is not equal to $var2"
fi

        说明var1和var2两个字符串不相等。

        接下来我们再来演示一下字符串的小于比较。

#!/bin/bash
#

var1="xiaoqiang"
var2="wangcai"

if [ $var1 \< $var2 ];then
        echo "$var1 is smaller than $var2"
else
        echo "$var1 is greater than $var2"
fi

        这里需要注意,小于号"<"要做一下转义,前面加一个反斜线,写成"\<" ,否则会提示报错。

        因为xiaoqiang的首字母是x,wangcai的首字母是w,在字母表中,x在w的后面。位置越靠后,代表字符串越大。所以输出:xiaoqiang is greater than wangcai

        这种字符串比较大小在实际工作中用的很少。接下来再给大家演示一下检查字符串不为空。

#!/bin/bash
#

var1="xiaoqiang"
var2="wangcai"

if [ -n $var1 ];then
        echo "var1 is not null"
else
        echo "var1 is null"
fi

         因为var1是有值的,所以执行then里面的指令,输出:var1 is not null。所以-n和-z是用来检查字符串是否为空值。

        接下来演示一下shell中的一个坑。

        假如我们先把var1改成:var1=""

#!/bin/bash
#

var1=""
var2="wangcai"

if [ -n $var1 ];then
        echo "var1 is not null"
else
        echo "var1 is null"
fi

        可以看到,输出的还是var1 is not null。

        然后我们将var1改成,var1=

#!/bin/bash
#

var1=
var2="wangcai"

if [ -n $var1 ];then
        echo "var1 is not null"
else
        echo "var1 is null"
fi

        输出的还是var1 is not null。

        我们再将var1直接删掉。我们没定义var1。

#!/bin/bash
#

var2="wangcai"

if [ -n $var1 ];then
        echo "var1 is not null"
else
        echo "var1 is null"
fi

        输出的还是var1 is not null。

        这里为什么每次都输出var1 is not null呢?我们通过sh -x condition_string.sh命令来看一下。

  • 通过sh -x 脚本名  #显示脚本执行过程

sh -x condition_string.sh

         这里是shell中的一个坑,虽然这里我们删掉了var1,没有定义它,所以$var1是个空值,所以我们在脚本中写的 -n $var1 就直接变成了 -n 了。if 判断后面直接跟一个 -n,它会将 -n 作为一个字符串来处理的。所以它是满足if条件的,会执行then里面的指令。

        我在命令行里面写if-then-else语句演示一下。

if [ -n ];then echo yes;else echo no;fi

        大家看它这时会将-n作为字符串来处理。这时我们应该怎么办呢?我们要在if判断里面给$var1加上一个双引号,写成"$var1"

#!/bin/bash
#

var2="wangcai"

if [ -n "$var1" ];then
        echo "var1 is not null"
else
        echo "var1 is null"
fi

        这时我们可以看到,输出的是:var1 is null。

        所以如果这时我们在if判断条件里面,$var2不加双引号时,shell是不会将$var1作为一个变量来处理的,它会认为你没定义,直接当成一个空值,if判断里面就变成了一个 -n 。大家可以比较一下$var1变量不加双引号和加双引号前后的sh -x condition_string.sh结果。

         好了,这节就说到这里。如果各位有补充请留言,我验证之后完善文章。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lvdapiaoliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值