15.1.3 类C的for循环
Shell支持类C的for循环。了解C语言或类C语言的读者一定会对(i=1;i<=10;i++)这样的结构十分熟悉,在Shell中其语法结构如下:
- for ((expression1; expression2; expression3))
do
command
done
其中,expression1为初始化语句,一般用作变量定义和初始化;expression2为判断表达式,用于测试表达式返回值并以此控制循环,返回值为真则循环继续,返回值为假时则退出循环;expression3用于变量值修改,从而影响expression2的返回值,并以此影响循环行为。下面的脚本演示了使用for语句控制的10次循环。
- [root@localhost ~]# cat c_for01.sh
#!/bin/bash
for ((i=1; i<=10; i++))
do
echo -n "$i "
done
echo
#
运行结果
[root@localhost ~]# bash c_for01.sh
1 2 3 4 5 6 7 8 9 10
使用类C的for循环还有其他的好处:可以在初始化expression1的同时初始化多个变量,另外,还可以在expression3中同时修改多个变量的值,每个expression中的多条语句之间使用逗号隔开。示例如下:
- [root@localhost ~]# cat c_for02.sh
#!/bin/bash
for ((i=1, j=100; i<=10; i++, j--))
do
echo "i=$i j=$j "
done
[root@localhost ~]# bash c_for02.sh
i=1 j=100
i=2 j=99
i=3 j=98
i=4 j=97
i=5 j=96
i=6 j=95
i=7 j=94
i=8 j=93
i=9 j=92
i=10 j=91
下面是使用类C的for循环的示例,在该示例中同时计算了1到100的和以及1到100的奇数和。
- [root@localhost ~]# cat c_for03.sh
#!/bin/bash
#sum01
用于计算1
到100
的和
#sum02
用于计算1
到100
的奇数和
sum01=0
sum02=0
for ((i=1, j=1; i<=100; i++, j+=2))
do
let "sum01+=i"
#
由于j
值增长速度比i
快,所以必须在过程中测试j
值不大于100
if [ $j -lt 100 ]; then
let "sum02+=j"
fi
done
echo "sum01=$sum01"
echo "sum02=$sum02"
#
运行结果
[root@localhost ~]# bash c_for03.sh
sum01=5050
sum02=2500