阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

shell学习集合-shell第十三讲

140次阅读
没有评论

共计 1929 个字符,预计需要花费 5 分钟才能阅读完成。

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

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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计1929字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中