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

shell脚本循环语句

[复制链接]

尚未签到

发表于 2018-8-20 09:17:08 | 显示全部楼层 |阅读模式
  笔记内容:

  • 20.10 for循环
  • 20.11/20.12 while循环
  • 20.13 break跳出循环
  • 20.14 continue结束本次循环
  • 20.15 exit退出整个脚本
  笔记日期:2017-11-23
  
20.10 for循环
DSC0000.jpg

    Shell中的for循环可以使用seq来定义循环的数字范围,图中定义的就是循环1-100的数字。图中的示例是计算1-100所有数字的和,shell中的数学运算需要使用方括号括起来,但是不需要像if的方括号那样加上空格。
    将图中的例子改一下,每次循环都打印一下相加的结果:
    代码示例:
     DSC0001.jpg
  
    运行结果:
     DSC0002.jpg
     DSC0003.jpg
  
DSC0004.jpg

  
  在shell中,for循环经常用来遍历某个目录下的文件,示例:
DSC0005.jpg

    注意:在for循环的循环条件中,它会把循环对象中的空格或者回车当做一个分隔符,例如上例中,for的循环条件对象是ls /etc/ 这个命令列出来的文件名称。如果这些文件命名称包含空格,for循环就会把这个文件名称给分成两个对象进行循环,例如我现在创建一个文件,文件名称包含空格,然后使用for循环去遍历看看会发生什么:
DSC0006.jpg

    图中,我创建了两个文件,这两个文件的名称都包含了空格,\ 是用于脱义空格的脱义符,没有脱义符的话touch命令会把空格当做分隔符。
    然后使用for循环去遍历:
DSC0007.jpg

  如图,可以看到带有空格的文件名被分隔开了,这是for循环的一个特点使用时需要注意。
  
20.11/20.12 while循环
DSC0008.jpg

    图中代码示例,用于完成每隔半分钟就检查系统的负载,当系统负载大于10的时候,就发送一份邮件,很显然这是一个常见的监控脚本。
    在while的循环条件中使用 “ : ”、“ true ”、“ 1 ”作为循环条件的话,就是死循环,所以上例中的while循环是一个死循环。
    示例:
     DSC0009.jpg
  
    查看运行过程:
     DSC00010.jpg
  
DSC00011.jpg

  以上代码用于检测用户输入的内容是否是一个纯数字,如果不是的话,就会提示输入的不正确,并且结束本次循环进入下一次循环,如果用户输入的是纯数字,就会跳出这个循环,打印用户输入的内容:
DSC00012.jpg

  
  运行结果:
DSC00013.jpg

  
20.13 break跳出循环
DSC00014.jpg

  break能够跳出整个循环让循环不再执行,示例:
DSC00015.jpg

  比较数字的时候使用 -eq ,比较字符串的时候用 ==
  
  运行结果:
DSC00016.jpg

  如图,循环在i等于3的时候就结束了循环。
  
20.14 continue结束本次循环
DSC00017.jpg

  continue是用于结束本次循环,进入下一次循环。当continue被执行后,continue后面的代码都不会被执行,而是从循环的第一句开始重新执行循环体。
  示例:
DSC00018.jpg

  
  运行结果:
DSC00019.jpg

  如图,当i等于3的时候就重新开始了循环,后面的代码就不再执行了。
  
20.15 exit退出整个脚本
DSC00020.jpg

  exit是退出整个脚本的执行,break只是跳出循环,而且break和continue都是在循环中使用的,而exit则可以在脚本的任意地方使用,一旦exit被执行,整个脚本就会结束,无论后面有没有代码都会结束。
  示例:
DSC00021.jpg

  
  运行结果:
DSC00022.jpg

  如图,当i等于3的时候就退出了整个脚本的执行,后面的代码就不会被执行了,exit可以用于返回一个数字,我们使用的echo $? 打印的数字就是脚本中exit返回出来的数字。
  
扩展
  select用法
  http://www.apelearn.com/bbs/thread-7950-1-1.html


运维网声明 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-554098-1-1.html 上篇帖子: shell编程速查手册 下篇帖子: shell 流程控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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