1列表for循环

列表for循环语句用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:

for variable in {list}

do

command

command

done

其中dodone之间的命令称为循环体,执行次数和list列表中常数或字符串的个数相同。

当执行for循环时,首先将in后的list列表的第一个常数或字符串赋值给循环变量,然后执行循环体;接着将list列表中的第二个常数或字符串赋值给循环变量,再次执行循环体,这个过程将一直持续到list列表中无其他的常数或字符串,然后执行done命令后的命令序列。

例:for输出每天

2、类C风格的for循环

C风格的for循环也可被称为计次循环,一般用于循环次数已知的情况,下面给出了类C风格的for循环的语法格式:

for(( expr1; expr2; expr3 ))

do

command

command

done

对类C风格的for循环结构的解释:

其中表达式expr1为循环变量赋初值的语句

表达式expr2决定是否进行循环的表达式,当判断expr2退出状态为0执行dodone之间的循环体,当退出状态为非0时将退出for循环执行done后的命令

表达式expr3用于改变循环变量的语句

c风格的for循环结构中,循环体也是一个块语句,要么是单条命令,要么是多条命令,但必须包裹在dodone之间。

例子:用C风格输出前5个数

4while循环

while循环语句也称前测试循环语句,它的循环重复执行次数,是利用一个条件来控制是否继续重复执行这个语句。while语句与for循环语句相比,无论是语法还是执行的流程,都比较简明易懂。while循环格式如下:

while expression

do

command

command

done

while循环语句之所以命名为前测试循环,是因为它要先判断此循环的条件是否成立,然后才作重复执行的操作。也就是说,while循环语句执行过程是:先判断expression的退出状态,如果退出状态为0,则执行循环体,并且在执行完循环体后,进行下一次循环,否则退出循环执行done后的命令。

为了避免死循环,必须保证在循环体中包含循环出口条件,即存在expression的退出状态为非0的情况。

例:计算1~100 之间的基数和


 

5、结束标记控制的while循环

Linux Shell编程中很多时候不知道读入数据的个数,但是可以设置一个特殊的数据值来结束while循环,该特殊数据值称为结束标记,其通过提示用户输入特殊字符或数字来操作。当用户输入该标记后结束while循环,执行done后的命令。在该情形下,while循环的形式如下所示:

read variable

while [[ "$variable" = sentinel ]]

do

read variable

done

例:猜数字游戏,当输入小于5时候才是正确的。

6、标志控制的while循环

标志控制的while循环使用用户输入的标志的值来控制循环的结束,这样避免了用户不知到循环结束标记的麻烦。在该情形下,while循环的形式如下所示:

signal=0

while (( signal != 1 ))

do

if expression

then

signal=1

fi

done

例:实现数字累计计算。

7until循环

在执行while循环时,只要是expression的退出状态为0将一直执行循环体。until命令和while命令类似,但区别是until循环中expression的退出状态不为0将循环体一直执行下去,直到退出状态为0,下面给出了until循环的结构:

until expression

do

command

command

done

例:计算1~5的平方

8、嵌套循环

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。

例:实现99乘法表

 

9break循环控制符

break语句可以应用在forwhileuntil循环语句中,用于强行退出循环,也就是忽略循环体中任何其他语句和循环条件的限制。

continue循环控制符

continue循环控制符应用在forwhileuntil语句中,用于让脚本跳过其后面的语句,执行下一次循环。

例:在用break跳出内部循环


 

 

例:放到外层跳出

 


 

 

例:continue放到外层跳出i=7的循环


 

10select结构

Selectbash的扩展结构,用于交互式菜单显示,用于从一组不同的值中进行选择,功能有点类似于case结构,但其交互性要比case好的多,其基本结构为:


 

select variable in {list}

do

command

break

done

例:选择颜色脚本,(select交换行很好,功能类似case结构)