在shell脚本中,循环是很重要的一环。循环可以不断的执行某个程序段落,直到用户设置的条件达成为止。在shell中,除了这种依据判断时达成与否的不定循环之外,还有另外一种已经固定要跑多少次的循环,可称之为固定循环。下面,我们主要对for,while,until三种循环做一下介绍。
一、for循环
For循环是给定变量列表的固定次数循环,其执行机制为依次将列表中的元素赋值给“变量名”,每次赋值后即执行一次循环体,直到列表中的元素耗尽,循环结束。其基本语法如下:
for 变量名 in 变量列表;do
循环体
Done
由于是固定次数循环,而其循环次数是由变量列表所决定的,那么对于变量列表,其生成方式主要有以下几种:
Ø 直接给出列表
Ø 整数列表
{m..n}
${seq m n}
Ø 返回列表的命令; $(COMMAND)
Ø 使用glob,如:*.sh
Ø 变量引用:$@,$*
其中,对于整数型的变量列表,shell同样提供了类似于C语言的for循环风格,其语法为:
for ((初始值;限制值;执行步长));do
程序段
done
这种语法适合于数值方式的运算当中,在for后面的括号内的三串内容意义为:
Ø 初始值:某个变量在循环当中的初始值,直接以类似i=1设置;
Ø 限制值:当变量的值在这个限制值的范围内,就继续进行循环,例如i<=100;
Ø 执行步长:每做一次循环时变量的变化量,如:i=i+1;
对于此种语法,其执行顺序为:初始值à限制值à程序段à执行步长à限制值。如此就形成了一个循环,直至变量超过限制值时结束循环。
下面我们利用for循环的两种语法分别打印九九乘法表。
首先我们用标准型for循环语法来编写脚本。
#!/bin/bash for i in {1..9};do for j in $(seq $i);do num=$[j*i] echo -ne "$i*$i=$num\t" done echo done
然后我们用C语言风格的for循环语法来编写脚本。
#!/bin/bash for ((i=1;i<=9;i++));do for ((j=1;j<=i;j++));do num=$[j*i] echo -ne "$j*$i=$num\t" done echo done
二、while循环
While循环是一种条件判断循环,只要满足设置的条件,就会执行相应的命令。其常用的基本语法如下。
while CONDITION; do
循环体
done
其中CONDITION为循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断;若条件判断为“true”,则执行一次循环;直到条件判断为“false”,则终止循环;因此,CONDITION一般应该有循环控制变量,而此变量的值会在循环体不断的被修正。
下面我们以while循环来打印一下九九乘法表。
#!/bin/bash i=1 #循环控制变量 while [ $i -le 9 ];do j=1 #循环控制变量 while [ $j -le $i ];do num=$[j*i] echo -ne "$j*$i=$num\t" j=$((j+1)) #循环控制变量的值在循环体内不断被修正 done echo i=$((i+1)) #循环控制变量的值在循环体内不断被修正 done
三、until循环
Until循环同样是一种条件判断循环,只要不满足设置的条件,就会执行相应的命令,其常用语法如下。
until CONDITION; do
循环体
done
其中CONDITION为循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断;若条件判断为“false”,则执行一次循环;直到条件判断为“true”,则终止循环;因此,CONDITION一般应该有循环控制变量,而此变量的值会在循环体不断的被修正。
下面我们以until循环来打印一下九九乘法表。
#!/bin/bash i=1 #循环控制变量 until [ $i -gt 9 ];do j=1 #循环控制变量 until [ $j -gt $i ];do num=$[j*i] echo -ne "$j*$i=$num\t" j=$((j+1)) #循环控制变量的值在循环体中不断被修正 done echo i=$((i+1)) #循环控制变量的值在循环体中不断被修正 done
原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/38241