1、列表for循环
列表for循环语句用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:
for variable in {list}
do
command
command
…
done
其中do和done之间的命令称为循环体,执行次数和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执行do和done之间的循环体,当退出状态为非0时将退出for循环执行done后的命令
表达式expr3用于改变循环变量的语句
类c风格的for循环结构中,循环体也是一个块语句,要么是单条命令,要么是多条命令,但必须包裹在do和done之间。
例子:用C风格输出前5个数
4、while循环
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
例:实现数字累计计算。
7、until循环
在执行while循环时,只要是expression的退出状态为0将一直执行循环体。until命令和while命令类似,但区别是until循环中expression的退出状态不为0将循环体一直执行下去,直到退出状态为0,下面给出了until循环的结构:
until expression
do
command
command
…
done
例:计算1~5的平方
8、嵌套循环
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。
例:实现99乘法表
9、break循环控制符
break语句可以应用在for、while和until循环语句中,用于强行退出循环,也就是忽略循环体中任何其他语句和循环条件的限制。
continue循环控制符
continue循环控制符应用在for、while和until语句中,用于让脚本跳过其后面的语句,执行下一次循环。
例:在用break跳出内部循环
例:放到外层跳出
例:continue放到外层跳出i=7的循环
10、select结构
Select是bash的扩展结构,用于交互式菜单显示,用于从一组不同的值中进行选择,功能有点类似于case结构,但其交互性要比case好的多,其基本结构为:
select variable in {list}
do
command
…
break
done
例:选择颜色脚本,(select交换行很好,功能类似case结构)
转载于:https://blog.51cto.com/peaceweb/778430