专栏首页北京马哥教育shell系列-shell第十一讲

shell系列-shell第十一讲

今天和大家分享一下shell系列-shell第十一讲内容!希望对大家有所帮助!

1、条件表达式 1.1、[ expression ] 用法 [ expression ]是用来做判断的字符。比如: bash [root@master1 ~]#[ 1 -eq 1 ] [root@master1 ~]#echo $? 0 这里的-eq就相当于我们数学上的等于号,那么我们这里的[ 1 -eq 1 ]表示1是否等于1,我们使用中括号做一个判断,1确实等于1,此时条件为真,命令执行成功,返回值为0。 或者我们可以使用的高级一点: bash [root@master1 ~]#[ 1 -eq 1 ] && echo "yes,1 确实等于1" || echo "no ,两者不相等" yes,1 确实等于1 [root@master1 ~]#[ 1 -eq 2 ] && echo "yes,1 确实等于1" || echo "no ,两者不相等" no ,两者不相等 1.2、[[ expression ]]用法 两个双括号是我们的bash shell的内置功能,一般情况下[ ]和[[ ]]用法是一样的,比如: bash [root@master1 ~]#[[ 1 -eq 1 ]] && echo "yes,1 确实等于1" || echo "no ,两者不相等" yes,1 确实等于1 都可以来做判断。大多数情况下都是一样的效果。不过两者也有一些区别。 2、[ ]和[[ ]]的区别 其实很多人对这两种用法上都会感到很大的疑惑,不知道什么时候用哪个,在此我总结了一下, bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ "$NAME" == "aaa bbb" ] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等 写一个shell脚本,然后使用[ ]来进行比对。然后发现两者是相等的。没有问题。 现在我们使用[[ ]]来试试。 bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ "$NAME" == "aaa bbb" ]] # 注意我这里改成了两个括号 then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等 [root@master1 ~]# 使用[[ ]]发现同样的结果,没有区别。 现在我们对引用的变量不加双引号,且使用单括号看看。 bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ $NAME == "aaa bbb" ] # 这里发生了改变,没有引号,且为单括号 then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh a.sh: 第 4 行:[: 参数太多 no, 不相等 直接报了一个错误给我们,然后还返回的是错误的结果,两个字符串明明是一样的。看来在单括号情况下必须加上双引号才行。 然后我们现在不加双引号,且使用双括号来看看 bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ $NAME == "aaa bbb" ]] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等 发现没有报错,这就是使用双括号的好处,因为很多人不喜欢引用变量的时候还加上双引号,他们往往只写引用变量的写法,这就导致程序经常出错的问题。 总结:当使用引用变量名这种机制时,[ ]和[[ ]]是有区别的,使用[ ]时需要在变量的外侧加上双引号,而使用[[ ]]时则不用这么来写。 3、test命令检测 test命令的功能和[ ]是一模一样的,在[ ]中需要注意的点,在test命令中同样需要注意。 test的用法是: bash [root@master1 ~]#test 1 -eq 1 [root@master1 ~]#echo $? 0 [root@master1 ~]#test 1 -eq 2 [root@master1 ~]#echo $? #得出错误的结果。 1

文章来自马哥教育官网欧! 如需要更多技术性文章,可以直接访问马哥教育官网!

原文链接:http://www.magedu.com/84003.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • shell系列-shell第十二讲

    上一节课我们给大家讲解了[ expression ]以及[[ expression ]]和test命令这三者的使用方法,以及他们的使用区别,不知道大家是否还记得...

    小小科
  • shell学习集合-shell第十三讲

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

    小小科
  • 【深度解析】Linux系统启动流程

    Linux系统启动流程大概总结下来是这么一个过程: POST-->BootLoader(MBR)-->Kernel(硬件探测、加载驱动、挂载根文件系统、/sbi...

    小小科
  • shell系列-shell第十二讲

    上一节课我们给大家讲解了[ expression ]以及[[ expression ]]和test命令这三者的使用方法,以及他们的使用区别,不知道大家是否还记得...

    小小科
  • Linux养成计划(七)

    导读: 此文章介绍Linux常用指令中的运行级别,以及我们忘记root密码时的解决方案。毕竟实际开发中我们用的都是命令行,所以掌握常用的指令对于Linux系统使...

    用户1093975
  • android 实现本地定时推送(兼容)

    首先写几点感悟: - 做兼容真的很累很费劲~ - android 8.0 广播部分不再支持动态注册,所以应该用service来实现定时推送功能 - 无论是闹钟还...

    陨石坠灭
  • android 实现本地定时推送(兼容)

    首先写几点感悟: - 做兼容真的很累很费劲~ - android 8.0 广播部分不再支持动态注册,所以应该用service来实现定时推送功能 - 无论是闹钟还...

    陨石坠灭
  • 国际多通道语音分离和识别大赛讯飞再夺冠,不知不觉已「三连冠」!

    5月4日,有着最难语音识别任务之称的CHiME-6成绩揭晓:科大讯飞联合中科大语音及语言信息处理国家工程实验室(USTC-NELSLIP)在给定说话人边界的多通...

    新智元
  • Fundebug支持错误与事件数据导出

    Fundebug控制台的过滤器给大家快速定位错误提供了方便,为了进一步给用户提供更加灵活的错误分析方式,Fundebug提供了导出数据功能,希望能为大家分析bu...

    Fundebug
  • 酷炫实现WebView与Native完美融合

    首先看个效果图: 这里背景是native的,左侧边栏也是native的,右侧内容是透明web页面,是不是很酷炫的样子,而且我们还可以自己加蒙版背景,是不是很...

    先知先觉

扫码关注云+社区

领取腾讯云代金券