while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环,until 的使用场景很少,一般使用 while 即可。

Shell while 循环的用法如下:

while循环的用法
until循环的用法
说明

while condition
do
    statements
done

  1. 在 while 循环体中必须有相应的语句使得 condition 越来越趋近于“不成立”,只有这样才能最终退出循环

until condition
do
    statements
done

  1. 在 until 循环体中必须有相应的语句使得 condition 越来越趋近于“成立”,只有这样才能最终退出循环
  1. condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条)
  2. while中的条件满足时进行循环,until中的条件不满足时进行循环
举栗 脚本 结果
计算从 m 加到 n 的值
while脚本
until脚本
  1. #!/bin/bash
  2. read -p 'input first value: ' m
  3. read -p 'input second value: ' n
  4. if [[ -z $m || -z $n ]]
  5. then echo 'the input should not be empty'
  6. fi
  7. sum=0
  8. while ((m<=n))
  9. do
  10. ((sum+=m))
  11. ((m++))
  12. done
  13. echo 'the sum is: '$sum
#!/bin/bash
  1. read -p 'input first value: ' m
  2. read -p 'input second value: ' n
  3. if [[ -z $m || -z $n ]]
  4. then echo 'the input should not be empty'
  5. fi
  6. sum=0
  7. until ((m>n))
  8. do
  9. ((sum+=m))
  10. ((m++))
  11. done
  12. echo 'the sum is: '$sum
  1. input first value: 1
  2. input second value: 100
  3. the sum is: 5050
  1. input first value: 7
  2. input second value: 3
  3. the sum is: 0
  1. input first value: 5
  2. input second value: r #r被当做0使用
  3. the sum is: 0
  1. input first value: r #r被当做0使用
  2. input second value: 2
  3. the sum is: 3

while的判断条件与until的判断条件恰好相反。。

实现一个简单的加法计算器,用户每行输入一个数字,计算所有数字的和
  1. #!/bin/bash
  2. sum=0
  3. echo "请输入您要计算的数字,按 Ctrl+D 组合键结束读取"
  4. while read n
  5. do
  6. ((sum += n))
  7. done
  8. echo "The sum is: $sum"

运行结果:

12
33
454
6767
1
2
The sum is: 7269

在终端中读取数据,可以等价为在文件中读取数据,按下 Ctrl+D 组合键表示读取到文件流的末尾,此时 read 就会读取失败,得到一个非 0 值的退出状态,从而导致判断条件不成立,结束循环。

13 shell while循环与until循环的更多相关文章

  1. Python语法基础03(if语句,while循环与for循环)

    if语句:语法:单分支if 判断条件:语句块 执行过程:首先执行判断条件,当条件成立则执行判断条件下面的语句块,若条件不成立,则不执行 双分支if 判断条件:语句块1else:语句块2执行过程: 首先 ...

  2. python-for循环与while循环

    while 循环 格式: while 条件 为 True: 代码块 while True: rayn_age = 18 age = input('请输入你的年龄:') age = int(age) i ...

  3. C#语句2——循环语句(for循环与for循环嵌套)

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for(初始条件;循环条件;状态改变) { 循环体 } break ——中断循环,跳出整个循环 continue——停止本 ...

  4. for循环与for循环嵌套

    今天温习了下分支语句跟for循环,主要讲解了for循环嵌套,这里开始有点迷糊了,整理下思路在做练习 for循环嵌套用我自己的大白话来说就是一个外圈的for程序里面一个套着一个小的for程序,如果在范围 ...

  5. List循环与Map循环的总结

    做了一下list和map的总结,没有什么技术含量,就全当复习了一下api. 测试环境是在junit4下,如果没有自己写一个main方法也是一样的. 首先是List的三种循环: @Test public ...

  6. 房上的猫:while循环与do-while循环,debug的调试运用

    一.循环结构 1.循环不是无休止进行的,满足一定条件的时候循环才会继续,称为"循环条件",循环条件不满足的时候,循环退出 2.循环结构是反复进行相同的或类似的一系列操作,称为&qu ...

  7. 浅谈C#中的for循环与foreach循环

    for循环和foreach循环其实可以算得上是从属关系的,即foreach循环是可以转化成for循环,但是for循环不一定能转换成foreach循环. 下面简单介绍一下两种循环: 1.for循环 代码 ...

  8. python while循环与for循环

    今天刚看了一下python的while和for循环,所以打算记录一下: while语句是python中的循环条件语句,while 判断条件 : pass break 例如: i = 1 sum = 1 ...

  9. 3.2.1 for循环与while循环的基本语法

    不停地重复一件事情,时间久了会非常无聊,然后大脑就会由于疲劳而容易入睡. 重复性的劳动会使人疲劳,而计算机不会,只要代码写得正确,计算机就会孜孜不倦地重复工作.在Python中主要有两种形式的循环结构 ...

随机推荐

  1. SpringBoot 整合 mybatis 开启驼峰命名规则自动转换

    引言 在使用 MyBatis 进行实际项目开发时,如果数据库表字段名与Java 实体类属性名不一致,映射时则需要编写表字段列表与 Java 实体类属性的映射关系,即resultMap,如下: < ...

  2. MYSQL导入/迁移后事件不执行

    mysql迁移后事件不执行 查看数据库是否开启事件支持 mysql> show variables like 'event_scheduler'; +-----------------+---- ...

  3. java命令的本质逻辑揭秘

    前言 在日常编码中,有了ide的支持,我们已经很少直接在命令行中直接执行java XXX命令去启动一个项目了.然而我们有没有想过,一个简单的java命令背后究竟做了些什么事情?让我们看下下面几个简单的 ...

  4. GO学习-(8) Go语言基础之数组

    Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...

  5. Processing平台之PVector求角度

    问题:在processing 平台,通过给定三个PVector向量,如何求他们之间的夹角,同时确定是在左侧还是右侧? 如图所示,在processing 平台中,PVector表示点的坐标是以原点为起点 ...

  6. 异步编程CompletableFuture

    多线程优化性能,串行操作并行化 串行操作 // 以下2个都是耗时操作 doBizA(); doBizB(); 修改变为并行化 new Thread(() -> doBizA()).start() ...

  7. deeplearning模型库

    deeplearning模型库 1. 图像分类 数据集:ImageNet1000类 1.1  量化 分类模型Lite时延(ms) 设备 模型类型 压缩策略 armv7 Thread 1 armv7 T ...

  8. TVM设计与构架构建

    TVM设计与构架构建 本文档适用于希望了解TVM体系结构和/或在项目上进行积极开发的开发人员.该页面的组织如下: 实例编译流程Example Compilation Flow描述TVM把一个模型的高级 ...

  9. CVPR2020:点云三维目标跟踪的点对盒网络(P2B)

    CVPR2020:点云三维目标跟踪的点对盒网络(P2B) P2B: Point-to-Box Network for 3D Object Tracking in Point Clouds 代码:htt ...

  10. JUC 并发编程--08,线程池,三大方法,七大参数,4种拒绝策略,代码演示

    三大方法: //线程池核心线程数为n, 最大线程数为 n ExecutorService fixedThreadPool = Executors.newFixedThreadPool(n); 源码: ...