除了while
循环和until
循环,Shell脚本还提供了for
循环,它更加灵活易用,更加简洁明了。Shell for
循环有两种形式:C语言风格和Python语言风格
一、C语言风格for循环
C语言风格for循环的用法如下:
for ((exp1;exp2;exp3))
do
statements
done
这个循环语句的执行顺序是:
- 先执行exp1
- 在执行exp2,若果它的判断结果是成立的,则执行循环体中的语句,否则结束整个for循环
- 执行完循环体再执行exp3
- 重复2.3,直到exp2的判断结果不成立,就结束循环
其中需要注意的是:
-
exp1
、exp2
、exp3
是三个表达式,其中exp2
是判断条件,for循环根据exp2
的结果来决定是否继续下一次循环; -
statements
是循环体语句,可以有一条,也可以有多条; -
do
和done
是Shell的关键字 -
exp1
仅在第一次循环时执行,以后不会再执行,可以认为这是一个初始化语句 -
exp2
一般是一个关系表达式,决定了是够还要继续下次循环,成为“循环条件”。 -
exp3
很多情况下是一个带有自增或者自减运算的表达式,以使循环条件逐渐变得“不成立”。 -
for
循环中exp1
(初始化语句)、exp2
(判断条件)和exp3
(自增或自减)都是可选项,都可以省略(但分号;
必须保留)
1.实例1
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
((sum += i))
done
echo "the sum is: $sum"
运行结果为:
the sum is: 5050
2.实例2:省略exp1
#!/bin/bash
sum=0
i=1
for ((;i<=100;i++))
do
((sum += i))
done
echo "the sum is: $sum"
运行结果为:
the sum is: 5050
3.实例3:省略exp2
若要省略exp2
后还要保证脚本功能不变,可以进行如下调整:
#!/bin/bash
sum=0
for ((i=1; ;i++))
do
if ((i > 100 )); then
break
fi
((sum += i))
done
echo "the sum is: $sum"
运行结果为:
the sum is: 5050
4.实例4:省略exp3
若要省略exp3
后还要保证脚本功能不变,可以进行如下调整:
#!/bin/bash
sum=0
for ((i=1;i<=100;))
do
((sum += i))
((i++))
done
echo "the sum is: $sum"
运行结果为:
the sum is: 5050
5.实例3:三个条件均省略
若要省略三个条件后还要保证脚本功能不变,可以进行如下调整:
#!/bin/bash
sum=0
for ((; ;))
do
if ((i > 100 )); then
break
fi
((sum += i))
((i++))
done
echo "the sum is: $sum"
运行结果为:
the sum is: 5050
二、Python语言风格for in循环
Python语言风格for in
循环用法如下:
for var in value_list
do
statements
done
其中:var
表示变量,value_list
表示取值列表,in
是Shell中的关键字
1.实例1
#!/bin/bash
sum=0
for n in 1 2 3 4 5
do
echo $n
((sum+=n))
done
echo "the sum is: $sum"
运行结果为:
1
2
3
4
5
the sum is: 15
2.实例2
#!/bin/bash
for str in "a" "b" "c"
do
echo $str
done
运行结果为:
a
b
c
3.实例3:in
后跟取值范围
in
后也可以给出一个取之范围{start..end}
其中:start
:起始值end
:终止值
注意:中间用两个点相连,这种形式只支持数字和字母
#!/bin/bash
sum=0
for n in {1..100}
do
((sum+=n))
done
echo sum is: $sum
for c in {A..z}
do
printf "%c" $c
done
输出结果为:
sum is: 5050
ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz
4.实例4:in
后跟命令
in
后还可以跟命令,根据命令的执行结果来选择范围:
#!/bin/bash
sum=0
#seq是一个linux命令 用来产生某个范围内的整数 并且可以设置步长
for n in $(seq 2 2 100)
do
((sum+=n))
done
echo sum is: $sum
运行结果为:
sum is: 2550
5.实例5:in
后跟通配符
in
后还可以跟通配符,根据通配符的执行结果来选择范围:
#!/bin/bash
for i in *.sh
do
echo $filename
done
运行结果为:
01.sh
02.sh
03.sh
04.sh
05.sh
06.sh
6.实例6:in
后跟特殊符号
in
后还可以跟特殊符号,根据特殊符号的执行结果来选择范围:
#!/bin/bash
#$@表示列表中的所有参数
function func(){
for str in $@
do
echo $str
done
}
func C++ Java Python Shell
运行结果为:
C++
Java
Python
Shell