日期: 2015年09月13日


流程控制

循环语句:for, while, until


循环:将循环体代码执行0、1或多次

进入条件:进入循环的条件

退出条件:循环终止的条件



<<========================================for循环】========================================>>

for循环:


for VARIABLE in LIST; do

循环体

done



进入条件:列表非空

退出条件:当列表遍历结束



LIST: 是由一个或多个空格或换行符分隔开的字符串组成:

把列表的每个字符串逐个赋值给VARIABLE表示的变量



LIST的生成方法:

(1) 整数列表

(a) {start..end}

(b) $(seq [start`step`end])

(2) 直接给出列表

(3) glob

(4) 根据命令生成



示例:

使用for循环添加10个用户,user1-user10

bash编程之:流程控制_循环控制


运行脚本测试:

bash编程之:流程控制_until_02




<<======================================while循环】======================================>>

while循环:


while CONDITION; do

循环体

控制变量的修正表达式

done


进入条件:当CONDITION为"真";

退出条件:当CONDITION为"假";



示例1

使用while循环求100以内所有正整数之和

bash编程之:流程控制_until_03


运行脚本测试:

bash编程之:流程控制_流程控制_04



示例2

使用while循环打印九九乘法表

bash编程之:流程控制_until_05


运行脚本测试:

bash编程之:流程控制_流程控制_06

 

 

 

<<======================================until循环】======================================>>

until循环:

 

until CONDITION; do

循环体

循环控制变量的修正表达式

done

 

进入条件:当CONDITION为"假"时

退出条件:当CONDITION为"真"时

 

示例:

使用until循环求100以内所有正整数之和

bash编程之:流程控制_for_07

 

运行脚本测试:

bash编程之:流程控制_流程控制_08




<<======================================【循环控制】======================================>>

 

循环控制:

 

continue [n]: 提前结束本轮循环,而直接进入下一轮

break [n]: 提前结束循环

 

使用格式:

while CONDITION; do

if CONDITION2; then

break [n]

fi

done

 

 

while CONDITION; do

...

if CONDITION2; then

continue [n]

fi

....

done

 

 

死循环:

while ture; do

循环体

if CONDITION; then

break

fi

done

 

 

until false; do

循环体

if CONDITION; then

break

fi

done

 

示例1

求100以内所有偶数之和

bash编程之:流程控制_循环控制_09


运行脚本测试:

bash编程之:流程控制_for_10



示例2

给脚本传递一个用户命名,如果该用户登录到该系统,则显示其已登录,如果没有检测到该用户

登录,则显示该用户未登录,休眠3秒后继续检测,如此重复,直到用户登录为止才结束循环。

bash编程之:流程控制_循环控制_11

 

运行脚本测试:

bash编程之:流程控制_循环控制_12


登录用户:

bash编程之:流程控制_流程控制_13

 

此时,检测到该用户已登录,则显示用户已登录,然后结束循环

bash编程之:流程控制_流程控制_14

 



<<======================================【特殊用法】======================================>>

whilefor循环的特殊用法

 

while循环的特殊用法:

遍历文件的每一行:

while read VARIABLE; do

循环体

done < /PATH/FROM/SOME_FILE

 

 

示例:

找出UID为偶数的所有用户,显示整行用户信息

bash编程之:流程控制_while_15

 

运行脚本测试:

bash编程之:流程控制_while_16


 


for循环的特殊用法:

for ((expr1;expr2;expr3)); do

循环体

done

 

expr1:定义控制变量,并初始赋值

expr2:循环控制条件

进入条件:控制条件为"真"

退出条件:控制条件为"假"

expr3:修正控制变量

 

示例:

给变量i赋值=1,在变量i的赋值小于30时,每次往自身+1,直到i的赋值等于30时退出循环,

每一次循环都与数字5相乘,得出以下结果。

bash编程之:流程控制_for_17