设为首页 收藏本站
查看: 792|回复: 0

shell编程基础:逻辑运算

[复制链接]

尚未签到

发表于 2018-8-20 09:51:25 | 显示全部楼层 |阅读模式
  最近在这里绕了很久啊,现在勉强出来了,分享下自己的一点理解

退出状态
  一个程序一旦运行必然只有两种结果,要么成功要么失败,成功的结果都一样,失败的原因却是各有不同(咔\~~\~,重来)。无论成功和失败程序都是要退出的,成功的会向系统返回一个成功的信息,失败的也会告诉系统自己执行失败。这个成功或者失败的状态就是退出状态。

退出状态码
  程序在退出时向系统返回一个数字用来代表自己退出状态,这个数字叫退出状态码。
  退出状态码存放在' ? '变量中,可以使用echo $?查看
  脚本中可以通过exit [n] 的方式来指定脚本退出时的状态码(注:exit会让脚本立刻退出,此时退出状态码由exit指定。如果未指定exit最终状态码取决于最后一条命令)

条件测试
  条件测试用来判断某需求是否满足。如两个数字是否相等,两个字符串是否相同……
  条件测试的格式是这样的:
  test EXPRESSION
  [ EXPRESSION ]
  [[ EXPRESSION ]]
  条件测试依旧是返回一个值用来表示测试结果,

逻辑运算
  与:有假必为假
  或:有真必为真
  非:真即是假假即是真
  command1  &&  command2
  逻辑与。当command1正确执行才执行command2,如果command1不正确执行,则不执行command2。在bash中,通过预定义变量“$?”来判断命令是否正确执行,如果"$?"的值为0则表示前一条命令正确执行,其他任意值都表示不正确执行。
  

[root@lori ~]$·echo hello && ls hello  
hello
  
ls: cannot access hello: No such file or directory
  
[root@lori ~]$·ls hello && echo hello
  
ls: cannot access hello: No such file or directory
  

  为什么,来看一下逻辑与,有假必为假,也就是当command1为假的时候此表达式command1&&command2已经确定结果为假,command2也就不必执行(因为此时无论command2真假表达式都为假)
  

command1 || command2  

  逻辑或,只有command1为假的时候才会执行command2
  

[root@lori ~]$·ls hello || echo hello  
ls: cannot access hello: No such file or directory
  
hello
  
[root@lori ~]$·echo hello || ls hello
  
hello
  

  依旧是上面的,逻辑或有真必为真,也就是当command1为真的时候此表达式command1 || command2已经为真command2便不必执行(已经不影响结果)
  !!!!很重要!!!!
  别太关注01,只关心真假
  别太关注01,只关心真假
  别太关注01,只关心真假
  为什么一直没说返回值的问题,因为这是个坑,我在里面差点出不来。先说我的结论:
  命令的返回值(退出状态码,条件测试也是一种命令)代表的是程序的退出状态,不是真假
  好了,下面的内容特别绕。
  一、真假对应1和0
  二、命令执行成功为真,失败为假
  三、返回值对应0或者非0(条件测试只返回0和1)
  四、返回值的0和非0对应的是程序的退出状态,0表示执行成功,非0表示失败
  五、逻辑运算中,返回值用来判断真假
  如command1 || command2
  command1执行→返回值
  以上command1已经结束
  查询返回值→由返回值得出真假→开始逻辑运算
  条件测试中由于返回值只有0和1更容易混淆,只要能接受条件测试是一种命令这种设定,理解起来应该会容易些吧。
  command1&&command2||command3
  把command3之前的内容看作一个命令就容易理解了



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-554126-1-1.html 上篇帖子: unbound dns 安装 控制 shell 脚本 下篇帖子: shell脚本之全库冷备份
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表