1 列表for循环
语句用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:
for variable in {list}
do
command
command
…
done
其中do和done之间的命令称为循环体,执行次数和list列表中常数或字符串的个数相同。
当执行for循环时,首先将in后的list列表的第一个常数或字符串赋值给循环变量,然后执行循环体;接着将list列表中的第二个常数或字符串赋值给循环变量,再次执行循环体,这个过程将一直持续到list列表中无其他的常数或字符串,然后执行done命令后的命令序列。
eg
#!/bin/bash
for var in 12 3 4
do
echo $var
done
eg
#!/bin/bash
for file in $(ls ..)
do
echo "file : $file"
done
2不带列表的for循环
执行时由用户指定参数和参数的个数,下面给出了不带列表的for循环的基本格式:
for variable
do
command
command
…
done
其中do和done之间的命令称为循环体,Shell会自动的将命令行键入的所有参数依次组织成列表,每次将一个命令行键入的参数显示给用户,直至所有的命令行中的参数都显示给用户。
eg
#!/bin/bash
echo "the number of the argument is $#"
for argument
do
echo $argument
done
运行结果
anders@anders-virtual-machine:~/code/shell/for$ ./for3.sh 1 2 3
the number of the argument is 3
1
2
3
anders@anders-virtual-machine:~/code/shell/for$ ./for3.sh hello world
the number of the argument is 2
hello
world
3 类C风格的for循环
类C风格的for循环也可被称为计次循环,一般用于循环次数已知的情况,下面给出了类C风格的for循环的语法格式:
for(( expr1; expr2; expr3 ))
do
command
command
…
done
对类C风格的for循环结构的解释:
其中表达式expr1为循环变量赋初值的语句
表达式expr2决定是否进行循环的表达式,当判断expr2退出状态为0执行do和done之间的循环体,当退出状态为非0时将退出for循环执行done后的命令
表达式expr3用于改变循环变量的语句
类C风格的for循环结构中,循环体也是一个块语句,要么是单条命令,要么是多条命令,但必须包裹在do和done之间。
#!/bin/bash
for (( i=1;i<=10;i++))
do
echo "$i time"
done