C语言风格的 for 循环(SHELL的循环写法 已验证20200517)
C语言风格的 for 循环
C语言风格的 for 循环的用法如下:
for((exp1; exp2; exp3))
do
statements
done
几点说明:
- exp1、exp2、exp3 是三个表达式,其中 exp2 是判断条件,for 循环根据 exp2 的结果来决定是否继续下一次循环;
- statements 是循环体语句,可以有一条,也可以有多条;
- do 和 done 是 Shell 中的关键字。
它的运行过程为:
1) 先执行 exp1。
2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。
3) 执行完循环体后再执行 exp3。
4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。
上面的步骤中,2) 和 3) 合并在一起算作一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
exp1 仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。exp2 一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。exp3 很多情况下是一个带有自增或自减运算的表达式,以使循环条件逐渐变得“不成立”。
for 循环的执行过程可用下图表示:

下面我们给出一个实际的例子,计算从 1 加到 100 的和。
- #!/bin/bash
- sum=0
- for ((i=1; i<=100; i++))
- do
- ((sum += i))
- done
- echo "The sum is: $sum"
运行结果:
The sum is: 5050
代码分析:
1) 执行到 for 语句时,先给变量 i 赋值为 1,然后判断 i<=100 是否成立;因为此时 i=1,所以 i<=100 成立。接下来会执行循环体中的语句,等循环体执行结束后(sum 的值为1),再计算 i++。
2) 第二次循环时,i 的值为2,i<=100 成立,继续执行循环体。循环体执行结束后(sum的值为3),再计算 i++。
3) 重复执行步骤 2),直到第 101 次循环,此时 i 的值为 101,i<=100 不再成立,所以结束循环。
由此我们可以总结出 for 循环的一般形式为:
for(( 初始化语句; 判断条件; 自增或自减 ))
do
statements
done
for 循环中的三个表达式
for 循环中的 exp1(初始化语句)、exp2(判断条件)和 exp3(自增或自减)都是可选项,都可以省略(但分号;
必须保留)。
1) 修改“从 1 加到 100 的和”的代码,省略 exp1:
- #!/bin/bash
- sum=0
- i=1
- for ((; i<=100; i++))
- do
- ((sum += i))
- done
- echo "The sum is: $sum"
可以看到,将i=1
移到了 for 循环的外面。
2) 省略 exp2,就没有了判断条件,如果不作其他处理就会成为死循环,我们可以在循环体内部使用 break 关键字强制结束循环:
- #!/bin/bash
- sum=0
- for ((i=1; ; i++))
- do
- if(( i>100 )); then
- break
- fi
- ((sum += i))
- done
- echo "The sum is: $sum"
break 是 Shell 中的关键字,专门用来结束循环,后续章节还会深入讲解。
3) 省略了 exp3,就不会修改 exp2 中的变量,这时可在循环体中加入修改变量的语句。例如:
- #!/bin/bash
- sum=0
- for ((i=1; i<=100; ))
- do
- ((sum += i))
- ((i++))
- done
- echo "The sum is: $sum"
4) 最后给大家看一个更加极端的例子,同时省略三个表达式:
- #!/bin/bash
- sum=0
- i=0
- for (( ; ; ))
- do
- if(( i>100 )); then
- break
- fi
- ((sum += i))
- ((i++))
- done
- echo "The sum is: $sum"
这种写法并没有什么实际意义,仅仅是为了给大家做演示。
]# cat a.sh
#!/bin/bash
i=1
for ((; i<=10; i++))
do
echo "h">>a
done
echo "The i is: $i"
举例
#!/bin/bash
i=0
for i in {Z..A}
do
echo $i
done
[root@localhost bash20200508]# ./az.sh
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
C语言风格的 for 循环(SHELL的循环写法 已验证20200517)的更多相关文章
- shell 各种循环判断
shell支持的循环有 Shell if else Shell case esac Shell for循环 Shell while循环 Shell until循环
- 15 shell for循环
除了 while 循环和 until 循环,Shell 脚本中还有for 循环,for 循环有两种使用形式:C语言风格的for循环与Python语言风格的for in循环,两种形式的for循环用法对比 ...
- shell脚本--循环结构
shell的循环结构有while和for两种 for循环 #!/bin/bash #文件名:test.sh i=4 for i in 2 4 6 8 10 do echo $i done echo $ ...
- shell脚本循环嵌套
嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...
- Linux Shell系列教程之(十)Shell for循环
本文是Linux Shell系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,今天就为大家介绍下Shel ...
- shell脚本-循环选择语句
shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...
- Linux shell for循环结构
Linux Shell for循环结构 循环结构 1:循环开始条件 2:循环操作 3:循环终止的条件 shell语言 for,while ...
- shell (二) shell for循环
for循环 基本示例 for i in var1 var2 var2 do echo $i done for i in {1..100} do echo $i done 列表中复杂值,可以使用引号或者 ...
- Linux 之Shell for循环
@代表所有参数所以如果后面跟上echo $v你会发现他会一次显示user userdebug eng $poo -le ${#prodlist[@]} 这句话是说 $poo小于等于prodlist中的 ...
随机推荐
- 理解的shell父子关系
今天我们谈谈linux系统的shell的父子关系,因为大家对手机都比较熟悉,手机本身也是一个linux主机,所以我们今天就拿手机来举个例子. 首先就是创建一个新的shell,你可以把它理解成一个手机打 ...
- Android Studio的基本开发环境,配置阿里云源
原创文章,转发请注明出处. 安装Android Studio 安装文件下载地址:https://developer.android.google.cn/studio/ 下载Gradle 由于国内的网络 ...
- .NET管道应用——工作池
名词解释 工作池:一组等待任务分配的线程.一旦完成了所分配的任务,这些线程可继续等待任务的分配. .NET管道:命名空间System.Threading.Channels中的Channel和Chann ...
- gateway调用Fegin失败问题解决
起因 新项目用的是springcloud2.0,网关用gateway替换了zuul. gateway动态路由跟zuul有本质上的区别.这就涉及到webflux这一套大东东了.简单来说,gateway是 ...
- Parentheses Balance UVA - 673
You are given a string consisting of parentheses () and []. A string of this type is said to be corr ...
- Day01_11_Java方法
Java - 方法 什么是java中的方法? - 方法就是一段代码片段,并且这段代码可以完成某个特定的功能.动作.是可以被重复的使用. - 方法就是类的一个动作. - 方法在C语言中也叫做函数 或 f ...
- (数据科学学习手札119)Python+Dash快速web应用开发——多页面应用
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- Libraries
Math.ceil() The Math.ceil() function returns the smallest integer greater than or equal to a given n ...
- Standalone模式下,通过Systemd管理Flink1.11.1的启停及异常退出
Flink以Standalone模式运行时,可能会发生jobmanager(以下简称jm)或taskmanager(以下简称tm)异常退出的情况,我们可以使用Linux自带的Systemd方式管理jm ...
- git平时用到的仓库
github茫茫仓库 若水三千,取一瓢饮 doocs/technical-books doocs/leetcode lepture/editor pandao/editor.md 未完..待续!!积累 ...