shell学习集合-shell第十三讲

欢迎同学们来到马哥教育官网,今天和大家分享的文章是shell学习集合中的shell第十三讲的内容,我们一起来学习一下吧!

1、shell字符串比较符
1.1、==
== 可用于判断变量是否相等,我们在此前的课程当中也都给大家讲过,字符串的比较建议使用[[ ]],因为我们直接对字符串本身做比较的话,我们会习惯上对字符串加上双引号,比如:
bash [root@master1 ~]#[[ "you are a pig" == "you are a pig" ]] [root@master1 ~]#echo $? 0
两个字符串是一模一样的,比较上也是没有问题的。但是我们在工作中往往不是这么使用的,我们会将字符串赋值给一个变量,然后拿这个变量去跟目标字符串做比较,这时候重点就来了,往往匹配上出现问题,比如会报这样的错误:test.sh: 第 4 行:[: 参数太多。这种错误就让我们很抓狂,我们明明写的是没有错误的,但是却不知道如何去排查 ‘’参数太多“ 这种问题。
所以这就是给大家强调的在进行字符串比较时最好使用[[ ]],比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ $NAME == "you are a pig" ]] [root@master1 ~]#echo $? 0
大家都看明白了吗?我们在引用变量$NAME,以这样的方式跟字符串做相等比较,最好使用[[ ]]
当然如果你非要使用[ ],那么引用变量 $NAME本身一定要加上双引号,即[ "$NAME" == "you are a pig" ],如果你就是不加双引号,否则就报test.sh: 第 4 行:[: 参数太多这样的错误直接懵逼了,
1.2、=
=本身我只是用做赋值操作,建议大家不要去用=来做字符串比较,因为比较诡异,而且Linux人大多数也都使用==来做比较,因此使用=本身做比较的同学,我个人建议还是改变自己的操作,再说我们都使用==做比较了,再花心思研究=做字符串比较操作是没有必要的,还浪费精力。
1.3、!=
!=表示不等于,与==正好是相反,在shell脚本中我们也经常使用它做一些字符串比较的操作。比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ $NAME != "you are a cat" ]] [root@master1 ~]#echo $? 0
两个字符串确实是不相等的,条件为真,返回值为0。
1.4、-n与-z
-n和-z都是用来判断字符串是否空的,不过两者也是有区别的,如下所示:
| -n | 当字符串长度不为0时条件为真,字符串长度为0时条件为假。 | | ------ | ------------------------------------------------------------ | | -z | 当字符串长度不为0时条件为假,字符串长度为0时条件为真。 |
可以看出来-n与-z两个功能正好相反,比如:
bash [root@master1 ~]#NAME="" [root@master1 ~]#[ -n "$NAME" ] [root@master1 ~]#echo $? 1 [root@master1 ~]#[ -z "$NAME" ] [root@master1 ~]#echo $? 0
我们现在赋值NAME变量值的长度为0,然后分别使用-n和-z来测试,发现符合我们的预期,NAME变量确实长度为0, -z判断长度为0,条件为真,返回值为0。
现在我们测试一个字符串变量长度不为0的情况,我们给NAME变量赋个字符串值,比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[ -z "$NAME" ] [root@master1 ~]#echo $? 1 [root@master1 ~]#[ -n "$NAME" ] [root@master1 ~]#echo $? 0
同样的,现在NAME变量有字符串值,此时-z发现字符串长度不为0,条件为假,返回值为1。
当然大家发现了上面的引用变量本身需要加上双引号,很多人还是不习惯加的,那么此时你会得不到想要的结果,此时在判断上是有错误的,不信你可以试试看。当然也可以解决,就是使用[[ ]]来解决,比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ -z $NAME ]] [root@master1 ~]#echo $? 1 [root@master1 ~]#NAME="" [root@master1 ~]#[[ -z $NAME ]] [root@master1 ~]#echo $? 0
大家看到效果了吗?这就是使用[[ ]]的好处。

声明:文章来源于网络,如有侵权请联系删除!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!