Linux for循环之类C风格for循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/magi1201/article/details/75730055

for循环是Linux shell 中最常用的结构。for 循环有三种结构:一种结构是列表for循环;第二种结构是不带列表for循环;第三种结构是类C风格的for循环。上篇博文讲解了不带列表for循环,本篇博文重点看类C风格for循环。类C风格的for循环也可被称为计次for循环,一般用于循环次数已知的情况。

下面是类C风格for循环的语法格式

for((expr1; expr2; expr3))
do
    command
    command
    ...
done
其中表达式expr1为循环变量赋初值的语句;表达式expr2决定是否进行循环的表达式,当判断expr2退出状态为0时,执行do和done之间的循环体,当退出状态为非0时,将退出for循环执行done后的命令;表达式expr3用于改变循环变量的语句。类C风格的for循环结构中,循环体也是一个块语句,要么是单条命令,要么是多条命令,但必须包裹在do和done之间。


ex9、输出前5个正数

[zhangqi@localhost shellscript]$ cat for_ex9.sh 
#!/bin/bash

#使用类C风格for循环输出1~5
for ((integer = 1; integer <= 5; integer++)) 
do
    echo "$integer"
done

[zhangqi@localhost shellscript]$ sh for_ex9.sh 
1
2
3
4
5
[zhangqi@localhost shellscript]$ 

脚本中for循环首先声明了循环变量integer,并赋值为1,之所以称integer为循环变量,是因为integer用于控制循环执行的次数和结束条件,接着判断integer是否小于或等于5,若integer小于或等于5,成立,则执行循环体do和done之间的命令,而后执行修正表达式“integer++”,将integer的值加1,再次判断integer小于或等于5是否成立,以此类推,直至循环结束。


使用类C风格for循环要注意以下事项:

扫描二维码关注公众号,回复: 3029339 查看本文章
  • 如果循环条件最初的退出状态为非0,则不会执行循环体
  • 当执行更新语句时,如果循环条件的退出状态永远为0,则for循环将永远执行下去,从而产生死循环
  • Linux shell中不运行使用非整数类型的数作为循环变量
  • 如果循环体中的循环条件被忽略,则默认的退出状态为0
  • 在类C风格的for循环中,可以将三个语句全部忽略掉,下面是合法的for循环
for((; ; ))
do
    echo "hello world"
done

ex10、循环计算1~100内所有的奇数之和
[zhangqi@localhost shellscript]$ cat for_ex10.sh 
#!/bin/bash

sum=0

for((i = 1; i <= 100; i = i + 2))
do
    let "sum += i"
done

echo "sum = $sum"

[zhangqi@localhost shellscript]$ sh for_ex10.sh 
sum = 2500
[zhangqi@localhost shellscript]$ 

其中循环条件为 i<=100,初始条件i=1,因此,i=i+2将步长设定为2,每执行一次循环体,就将i的值增加2,最终产生结果sum 为2500

ex11、使用逗号运算符对两个变量进行操作
[zhangqi@localhost shellscript]$ cat for_ex11.sh 
#/bin/bash

limit=5

for((a = 1, b = 5; a <= limit; a++, b --))
do 
    let "temp=a-b"
    echo "$a-$b=$temp"
done

[zhangqi@localhost shellscript]$ sh for_ex11.sh 
1-5=-4
2-4=-2
3-3=0
4-2=2
5-1=4
[zhangqi@localhost shellscript]$ 

在脚本中,对变量a 和 变量b 同时初始化,通过a <=limit 来设置循环条件,然后通过a++设置a加1操作、b--设置b减1操作,每执行一次for循环,都判断a是否小于等于limit,该循环将不断的执行,直到a > 5。

在使用类C风格的for循环时,要保证for循环可以正常结束,也就是必须保证循环条件的结果存在退出状态为非0的情况,否则将无休止地执行下去,从而产生死循环。


猜你喜欢

转载自blog.csdn.net/magi1201/article/details/75730055