C语言风格 |
for((exp1; exp2; exp3)) do statements done
|
exp1/exp2/exp3分别代表初始化语句、判断条件、自增或自减,三者皆可省略,但是分号(;)必须保留。
它的运行过程为:
- 1) 先执行 exp1。
- 2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。
- 3) 执行完循环体后再执行 exp3。
- 4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。
- exp1 是一个初始化语句,仅在第一次循环时执行。
|
- sum=0
-
- for ((i=1; i<=100; i++))
- do
- ((sum += i))
- done
-
- echo "The sum is: $sum"
运行结果: The sum is: 5050
|
- sum=0
- i=1
- for ((; i<=100; i++))
- do
- ((sum += i))
- done
-
- echo "The sum is: $sum"
可以看到,将i=1 移到了 for 循环的外面
|
- sum=0
- for ((i=1; ; i++))
- do
- if(( i>100 )); then
- break
- fi
- ((sum += i))
- done
- echo "The sum is: $sum"
省略 exp2,没有了判断条件,如果不作其他处理就会成为死循环,因此可以在循环体内部使用 break 关键字强制结束循环
|
省略exp3的实例
- #!/bin/bash
- sum=0
- for ((i=1; i<=100; ))
- do
- ((sum += i))
- ((i++))
- done
- echo "The sum is: $sum"
省略了 exp3,就不会修改 exp2 中的变量,这时可在循环体中加入修改变量的语句。 |
|
Python语言风格 |
for var in val_list do statements done
|
- var表示变量,val_list表示取值列表
- in val_list部分可以省略,省略后的效果类似于in $@
它的运行过程为:
- 1)每次循环都会从 val_list 中取出一个值赋给变量 var
- 2)进入循环体,执行循环体中的 statements。
- 3)直到取完 value_list 中的所有值,循环结束
各种val_list:
- 直接给出具体的值
- 给出一个范围
- 使用命令产生的结果
- 使用通配符
- 使用特殊变量
|
- sum=0
- for n in 1 2 3 4
- do
- echo $n
- ((sum+=n))
- done
- echo "The sum is "$sum
运行结果: 1 2 3 4 The sum is 10
|
给出一个取值范围,格式为:{start..end},注意中间用两个点号相连,该形式只支持数字和字母。
- sum=0
- for n in {1..100}
- do
- ((sum+=n))
- done
- echo $sum
运行结果: 5050
输出从 A 到 z 之间的所有字符:
- for c in {A..z}
- do
- printf "%c" $c
- done
输出结果: ABCDEFGHIJKLMNOPQRSTUVWXYZ
[]^_`abcdefghijklmnopqrstuvwxyz 可以发现,Shell 是根据 ASCII 码表来输出的。
|
使用命令的执行结果
求偶数和
- #!/bin/bash
- sum=0
- for n in $(seq 2 2 100)
- do
- ((sum+=n))
- done
- echo $sum
运行结果: 2550
seq 是一个 Linux 命令,用来产生某个范围内的整数,并且可以设置步长。
seq 2 2 100 表示从 2 开始,每次增加 2,到 100 结束。
|
使用shell通配符
使用通配符时,不适用ls命令也可查看当前目录下的文件
- for filename in *.sh
- do
- echo $filename
- done
运行结果: demo.sh test.sh abc.sh
|
使用特殊变量,如 $#、$*、$@、$?、$$ 等
在函数中
- function func(){
- for str in $@
- do
- echo $str
- done
- }
- func C++Java Python
运行结果: C++ Java Python
省略 val_list,省略后的效果和使用$@ 一样
- function func(){
- for str
- do
- echo $str
- done
- }
- func C++ Java Python
运行结果: C++ Java Python
|