Shell 编程6(循环语句for)

2016-07-14

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