我们继续将bash脚本编程,回顾一下程序的执行流程,分别为:

顺序执行
选择执行
循环执行

而对于循环执行来说,其分类涉及到以下几种:

    for, while, until

每个循环都有执行条件和退出条件,这样的话才能够执行该循环,而且一旦进入之后也不能够无限期的循环,所以还要有退出条件,将循环结果用于其它代码进行计算执行,而各个分类的进入循环和退出循环的条件是有所区别的。

进入条件:for:列表元素非空;while:条件测试结果为"真";until:条件测试结果为"假";退出条件:for:列表元素遍历完成;while:条件测试结果为"假";until:条件测试结果为"真";

一、循环控制语句

1.1 contunue语句

我们今天来讲一下循环的另一个知识点,叫做循环控制语句,对于for循环来说,如果进入执行条件的话,列表元素不是空的就可以了,而退出条件是条件列表中的元素遍历完成则退出循环,而每一次的开始循环,都是在执行循环体中的代码,循环体执行结束时则开始下一轮的循环,直到退出该循环。但循环控制语句可以改变其默认的行为,那么循环控制语句就是在循环体当中用来控制循环执行行为的这么一个语句,它能够实现本来这一轮循环完成的时候,它能够提前能够进入下一轮循环,例如在循环体当中有十个语句,执行到第五个的时候停止执行该循环体,转而重新进入下一轮测试,而这个控制我们需要使用contunue

循环控制语句:contunue:提前结束本轮循环,而直接进入下一轮循环判断;

以while循环为例,那么该控制语句的使用用法:

while CONDITION1; doCOM1...if CONDITION2; thencontinuefiCMDn...done

执行continue之后,COMDn之后的语句都不会在执行,因此,该循环则结束,它用于在循环体语句当中的中间的某一个位置。

1.2 break语句

  break的作用不是结束本轮循环,而是直接跳出并结束循环,它的用法和continue语句的格式一样。

break:提前跳出循环;while CONDITION1; doCOMD1...if CONDITION2; thenbreakfiCMDn...done

和continue语句所不同的是,break可以在任何一个位置上出现。
  当然在使用break语句之前,我们先说一下如何创建死循环,如果说我们不知道要循环多少次的时候,这个时候我们就需要创建一个永久能够符合条件的循环在运行,但一直死循环会造成对系统资源增加负担,我们可以让死循环每隔多长时间运行一次,使用sleep命令能够缓解bash循环对进程可以进行睡眠,而创建格式为:

创建死循环:while true; do循环体done

而sleep命令的用法为:

sleep命令:sleep - delay for a specified amount of timesleep NUMBER

由于没有退出条件,所以这是死循环,但我们不能看着它一直循环下去,我们必须得让它满足某个条件时必须让其退出该循环去执行其它指令,那么它的退出方式为当某个条件满足时,可让循环体去执行break命令。

退出方式:某个测试条件满足时,让循环体执行break命令;

示例:每隔3秒钟系统以上获取已经登录用户的信息;其中,如果logstash用户登录了系统,则记录于日志中,并退出;

#!/bin/bash
#
while true; doif who | grep "^li\>" &> /dev/null; thenecho "user li login."breakfisleep 3echo "user li not login."
doneecho "$(date +"%F %T") li logged on." >> /tmp/user.log

二、循环的特殊用法

2.1 while循环的特殊用法

while循环的特殊用法就是用来去遍历文件,当然这个遍历是遍历文件的行,假如说要去遍历该文件的每一行时,使用该机制是一个不错的选择,比如说我们取得ID号为偶数的用户名,以及shell和用户id。对于这个示例来讲,我们的特殊用法使用的是read关键字,在这里不用和用户交互,后面跟上一个变量开始循环,使用输入重定向来指定文件路径。

while循环的特殊用法(遍历文件的行):while read VARIABLE; do循环体done < /PATH/FROM/SOMEFILE

它所实现的功能为:

依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将其赋值给VARIABLE变量;

示例:找出ID号为偶数的用户,显示其用户名、ID、及默认shell;

#!/bin/bash
#while read line; dousername=`echo $line | cut -d: -f1`userid=`echo $line | cut -d: -f3`usershell=`echo $line | cut -d: -f7`if [ $[$userid%2] -eq 0 ]; thenecho "$username, $userid, $usershell"fi
done < /etc/passwd

2.2 for循环的特殊用法

  for循环的特殊用法和while的循环遍历也是一样的,其该用法为:

for循环的特殊用法:for ((控制变量初始化;条件判断表达式;控制变量的修正语句));do循环体done

对于括号里的条件来说,作为控制变量初始化,是仅在循环代码开始运行时只执行一次,而在控制变量的修正表达式是在每轮循环结束会先控制遍历修正运算,而后在做条件判断。

控制变量初始化:仅在循环代码开始运行时执行一次;控制变量的修正语句:每轮循环结束会先进行控制遍历修正运算,而后在做条件判断;

示例:求100以内所有正整数之和;

#!/bin/bash
#
declare -i sum=0
for ((i=1;i<=100;i++)); dolet sum+=$i
done
echo "Sum: $sum"

转载于:https://blog.51cto.com/tianxie/2130712

2018-6-19bash编程之循环相关推荐

  1. 软件工程(2018)结对编程第一次作业

    软件工程(2018)结对编程第一次作业 本次作业要求对结对编程队友进行一次代码审查. 代码审查表如下 功能模块名称 图的邻接矩阵输出 审查人 李宗健 审查日期 2018/4/6 代码名称 图的邻接矩阵 ...

  2. shell编程之循环语句

    shell编程之循环语句 文章目录 shell编程之循环语句 一.for循环语句 1. for循环语法结构 ㈠ 列表循环 2. 应用案例 二.while循环语句 1. while循环语法结构 2. 应 ...

  3. 2018深信服java笔试题,深信服2018秋招编程题

    深信服2018秋招编程题 深信服2018秋招编程题 第一题: 其中,reverse函数的代码实现如下: 1. unsigned int reverse(unsigned int num) { unsi ...

  4. 京东2018秋招编程题

    C++开发工程师 京东 2018秋招编程题 (代码后续更新...) 1.神奇数 将一个数n的各数位分成两部分,两部分之和相等,则称这个数为神奇数.比如242分成[2,2].[4].输入一个范围[l, ...

  5. 滴滴2018秋招编程题

    滴滴 2018秋招 编程题 1.寻找丑数 丑数的定义是,只包含因子2.3和5的数称作丑数.比如6和8是丑数,14不是丑数,因为含有因子7.输入一个整数n,输出第n个丑数.我们认为第一个丑数是1. 解析 ...

  6. PowerMILL 2018四五轴编程后处理宏制作视频教程

    PowerMILL 2018四五轴编程后处理宏制作视频教程 链接:https://pan.baidu.com/s/1lFUeu80IbVlhDtqff1kaFA 提取码:wrpu

  7. PowerMill 2018三五轴编程+后处理制作视频教程

    PowerMill 2018三五轴编程+后处理制作视频教程 链接:https://pan.baidu.com/s/1Wlk36admxCZdFj0hEuENVw 提取码:l939

  8. 魔法币 java_网易2018校招笔试编程题-魔法币 java实现

    魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...

  9. PowerMILL 2018四五轴编程后处理宏制作

    PowerMILL 2018四五轴编程后处理宏制作视频教程 链接:https://pan.baidu.com/s/1I20Uo2FN2bRKmqm3hG1uzg 提取码:xcpj

  10. Shell编程之循环语句(详细讲解以及脚本案例)

    Shell编程之循环语句(详细讲解以及脚本案例) 文章目录 一.for语句的结构 (一).for语句应用实例 1.示例1--批量添加用户 2.示例2--使用根据IP地址检查主机状态 3.示例3--fo ...

最新文章

  1. [HEOI2016/TJOI2016]排序
  2. 使用独立mysql_MYSQL建立独立数据库以及独立数据库用户详细教程,利用PHPstudy自带的MySQL-Front...
  3. basys2数码管共阳还是共阴_数据选择器Multiplexer || 数码管动态显示 ||实现逻辑函数 || 重难考点 || 数电...
  4. 风变python怎么样_Python取代Excel?风变编程带你了解如何更好地学Python!
  5. Asp.net Core 添加 EF 工具并执行初始迁移错误解决方法(Add-Migration Initial---Build failed.)
  6. Google App Engine已经支持JAVA了
  7. Leetcode 刷题笔记(十六) —— 二叉树篇之二叉搜索树的属性
  8. String的创建和常量池的关系,intern()相关问题
  9. 网络流(二) 最大流算法的实现
  10. 学生来看我,我自我满足...........
  11. 从招式与内功谈起——设计模式概述(三)
  12. 小白到学会python要多久_零基础小白多久能学会python
  13. CnPeng说:“快应用”的慢节奏
  14. ubuntu系统 有线网络无法通过网页认证上网
  15. PC-Lint的使用方法
  16. html5 健身房模板,健身房瘦身HTML模板
  17. 百度地图API学习---隐藏百度版权标志
  18. CTR---DIN原理,及deepctr组网实现DIN
  19. ERP-库存与存货-原料采购单
  20. 0成本涨粉过万详细复盘,新手也可100%实操上手!

热门文章

  1. spark BlockManager如何实现shuffle
  2. flink中的HybirdmemorySegment
  3. java内存区_基于jvm java内存区域的介绍
  4. strtotime 获取一个月的开始 或者一个月的结束
  5. VMware的宿主模式
  6. 安装虚拟机Centos系统并安装Docker过程记录
  7. 贴片电阻上写着“0”,所谓的“零欧电阻”,在电子电路中的用处很大
  8. python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)
  9. G1垃圾收集器全视角解析
  10. 利用python求解度中心性