前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell学习集合-shell第十三讲

shell学习集合-shell第十三讲

作者头像
小小科
修改2020-05-11 14:18:32
5040
修改2020-05-11 14:18:32
举报
文章被收录于专栏:北京马哥教育

欢迎同学们来到马哥教育官网,今天和大家分享的文章是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 大家看到效果了吗?这就是使用[[ ]]的好处。

文章转自马哥教育官网,如果需要更多的技术性文章,欢迎访问马哥教育官网!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档