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 的和。

  1. #!/bin/bash
  2. sum=0
  3. for ((i=1; i<=100; i++))
  4. do
  5. ((sum += i))
  6. done
  7. 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:

  1. #!/bin/bash
  2. sum=0
  3. i=1
  4. for ((; i<=100; i++))
  5. do
  6. ((sum += i))
  7. done
  8. echo "The sum is: $sum"

可以看到,将i=1移到了 for 循环的外面。

2) 省略 exp2,就没有了判断条件,如果不作其他处理就会成为死循环,我们可以在循环体内部使用 break 关键字强制结束循环:

  1. #!/bin/bash
  2. sum=0
  3. for ((i=1; ; i++))
  4. do
  5. if(( i>100 )); then
  6. break
  7. fi
  8. ((sum += i))
  9. done
  10. echo "The sum is: $sum"

break 是 Shell 中的关键字,专门用来结束循环,后续章节还会深入讲解。

3) 省略了 exp3,就不会修改 exp2 中的变量,这时可在循环体中加入修改变量的语句。例如:

  1. #!/bin/bash
  2. sum=0
  3. for ((i=1; i<=100; ))
  4. do
  5. ((sum += i))
  6. ((i++))
  7. done
  8. echo "The sum is: $sum"

4) 最后给大家看一个更加极端的例子,同时省略三个表达式:

  1. #!/bin/bash
  2. sum=0
  3. i=0
  4. for (( ; ; ))
  5. do
  6. if(( i>100 )); then
  7. break
  8. fi
  9. ((sum += i))
  10. ((i++))
  11. done
  12. 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)的更多相关文章

  1. shell 各种循环判断

    shell支持的循环有 Shell if else Shell case esac Shell for循环 Shell while循环 Shell until循环

  2. 15 shell for循环

    除了 while 循环和 until 循环,Shell 脚本中还有for 循环,for 循环有两种使用形式:C语言风格的for循环与Python语言风格的for in循环,两种形式的for循环用法对比 ...

  3. shell脚本--循环结构

    shell的循环结构有while和for两种 for循环 #!/bin/bash #文件名:test.sh i=4 for i in 2 4 6 8 10 do echo $i done echo $ ...

  4. shell脚本循环嵌套

    嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...

  5. Linux Shell系列教程之(十)Shell for循环

    本文是Linux Shell系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,今天就为大家介绍下Shel ...

  6. shell脚本-循环选择语句

    shell脚本-循环选择语句 过程式编程语言: 顺序执行 选择执行 循环执行 注:条件中的变量,可以在执行语句中使用,不用在加上"$". if语句 根据命令的退出状态来执行命令 单 ...

  7. Linux shell for循环结构

    Linux Shell   for循环结构 循环结构            1:循环开始条件      2:循环操作      3:循环终止的条件 shell语言          for,while ...

  8. shell (二) shell for循环

    for循环 基本示例 for i in var1 var2 var2 do echo $i done for i in {1..100} do echo $i done 列表中复杂值,可以使用引号或者 ...

  9. Linux 之Shell for循环

    @代表所有参数所以如果后面跟上echo $v你会发现他会一次显示user userdebug eng $poo -le ${#prodlist[@]} 这句话是说 $poo小于等于prodlist中的 ...

随机推荐

  1. OO第三单元作业——魔教规格

    OO第三单元作业--魔教规格 JML的理论基础和相关工具   JML(Java Modeling Language,Java建模语言),在Java代码种增加了一些符号,这些符号用来标志一个方法是干什么 ...

  2. Netcore webapi action swagger response返回参数使用匿名类型

    问题:action中返回匿名对象时,swagger只能按强类型生成返回值描述 解决办法:使用roslyn在内存中动态执行代码,使用json.net反序列化匿名对象,向swagger返回动态匿名对象 效 ...

  3. OpenPAL3:仙三开源版的第二个小目标 Accomplish!

    去年的时候,OpenPAL3 的第一个版本发布 之后,我给 0.2 版本设定了一个小目标:让景天能跑出永安当.当时的第一个版本还只能算是概念验证的版本,没有音乐支持.输入支持,不能直接读取仙剑三的打包 ...

  4. ECDSA密钥对生成以及在Token中的应用

    1 概述 本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程. 2 ECDSA 2.1 简介 ECC(Elliptic Curve Crypto ...

  5. Flutter 状态管理- 使用 MobX

    文 / Paul Halliday, developer.school 创始人 众所周知,状态管理是每个软件项目都需要持续迭代更新的方向.它并不是一个「一次性」的工作, 而需要不断确保你遵循的最佳实践 ...

  6. AI数学基础之:P、NP、NPC问题

    目录 简介 P问题 NP问题 NP问题的例子 有些NP问题很难解决 NPC问题 NP-hard P和NP问题 简介 我们在做组合优化的时候需要去解决各种问题,根据问题的复杂度不同可以分为P.NP.NP ...

  7. PowerShell-1.入门及其常用

    PowerShell可以理解成是加强版的批处理,但是和批处理完全不同,比如可以调用API等.应用场景平时使用的用户机基本都支持了(出了XP). 常用情节:便捷快速开发,或者是**(因为不存在自己的PE ...

  8. dependencyManagement 版本管理

    帮别人解决bug的时候碰到,随便记录一下. 使用<dependencyManagement>标签, 做版本管理的时候,需要父子项目关联,就需要子模块中利用<parent> 否则 ...

  9. VMware-viclient-all

    VMware-viclient-all https://my.vmware.com/web/vmware/details?productId=491&downloadGroup=ESXI60U ...

  10. Mac安装python 环境& pychaem

    一.文档说明 在Mac上其实自带python环境,但是很多的library安装python是2.7的版本. 验证:可以在终端Terminal中输入:python 如下图是未安装之前,但是咱们需要在自己 ...