Shell for循环详解
Python风格的for循环
Python 风格的 for in 循环的用法如下:
for variable in value_list
do
statements
done
variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字。
每次循环都会从 value_list 中取出一个值赋给变量 variable,然后进入循环体(do 和 done 之间的部分),执行循环体中的 statements。直到取完 value_list 中的所有值,循环就结束了。
Shell for in 循环举例:
#!/bin/bash
sum=0
for n in 1 2 3 4 5 6
do
echo $n
((sum+=n))
done
echo "The sum is "$sum
运行结果:
1
2
3
4
5
6
The sum is 21
对 value_list 的说明
取值列表 value_list 的形式有多种,你可以直接给出具体的值,也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符,下面我们一一讲解。
1) 直接给出具体的值
可以在 in 关键字后面直接给出具体的值,多个值之间以空格分隔,比如1 2 3 4 5
、"abc" "390" "tom"
等。
上面的代码中用一组数字作为取值列表,下面我们再演示一下用一组字符串作为取值列表:
#!/bin/bash
for str in "test1" "test2" "test3"
do
echo $str
done
运行结果:
test1
test2
test3
2) 给出一个取值范围
给出一个取值范围的具体格式为:
{start..end}
start 表示起始值,end 表示终止值;注意中间用两个点号相连,而不是三个点号。根据笔者的实测,这种形式只支持数字和字母。例如,计算从 1 加到 100 的和:
#!/bin/bash
sum=0
for n in {1..100}
do
((sum+=n))
done
echo $sum
运行结果:
5050
再如,输出从 A 到 z 之间的所有字符:
#!/bin/bash
for c in {A..z}
do
printf "%c" $c
done
输出结果:
ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz
可以发现,Shell 是根据 ASCII 码表来输出的。
3) 使用命令的执行结果
使用反引号``
或者$()
都可以取得命令的执行结果。例如,计算从 1 到 100 之间所有偶数的和:
#!/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 脚本文件:
#!/bin/bash
for filename in $(ls *.sh)
do
echo $filename
done
运行结果:
demo.sh
test.sh
abc.sh
目录 返回
首页