for((exp1; exp2; exp3))
do
statements
done
几点说明:
do 和 done 是 Shell 中的关键字。#!/bin/bash
sum=0
for ((i=1; i<=100; i++))
do
((sum += i))
done
echo "The sum is: $sum"
输出:
The sum is: 5050
for variable in value_list
do
statements
done
variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字。
每次循环都会从 value_list 中取出一个值赋给变量 variable,然后进入循环体(do 和 done 之间的部分),执行循环体中的 statements。直到取完 value_list 中的所有值,循环就结束了。
#!/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
可以在 in 关键字后面直接给出具体的值,多个值之间以空格分隔,比如1 2 3 4 5、“abc” “390” "tom"等。
#!/bin/bash
for str in "aaa" "bbb" "ccc" "ddd"
do
echo $str
done
输出:
aaa
bbb
ccc
ddd
给出一个取值范围的具体格式为:
{start..end}
start 表示起始值,end 表示终止值;注意中间用两个点号相连,而不是三个点号。根据笔者的实测,这种形式只支持数字和字母。
#!/bin/bash
sum=0
for n in {1..100}
do
((sum+=n))
done
echo $sum
输出:
5050
#!/bin/bash
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 结束。
#!/bin/bash
for filename in $(ls *.sh)
do
echo $filename
done
输出:
demo.sh
test.sh
abc.sh
Shell 通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件,而不是文本
#!/bin/bash
for filename in *.sh
do
echo $filename
done
输出:
demo.sh
test.sh
abc.sh