1 for循环
-
定义
for循环有三种结构:
- 列表for循环
- 不带列表for循环
- 类c风格的for循环
1.1 列表for循环
-
定义
列表for循环语句用于将一组命令执行已知的次数
-
语法
for variable in {list} do command; command; ... done
-
示例
#! /bin/bash for i in {1..5} do echo "test $i"; done; # Linux shell支持列表for循环中使用略写的计数方式
#!/bin/bash sum=0; for in in {1..100..2} do let "sum+=i"; done; echo "sum=$sum"; # Linux shell中还支持按规定的步数进行跳跃的方式实现列表for循环
1.2 不带列表for循环
-
说明
不带列表的for循环执行时,由用户指定参数和参数的个数
-
示例
#! /bin/bash echo "number of arguments is $#" for argeument do echo "$argument" done
shell会自动将命令行键入的所有参数依次组织成列表,每次将一个命令行键入的参数显示给用户,直到所有的命令行中的参数都显示给用户。
1.3 类C风格的for循环
-
定义
可被称为计次循环,一般用于循环次数已知的情况 -
语法
for (( expr1;expr2;expr3 )) do command command done
- 表达式expr1为循环变量赋初值的语句
- 表达式expr2决定是否进行循环的表达式,当判断expr2退出状态为0时,执行do和done之间的循环体,当退出状态为非0时,将退出for循环执行done后的命令
- 表达式expr3用于改变循环变量的语句
-
示例
#! /bin/bash for (( i=1; i<=5; i++ )) do echo "$i" done;
2 seq命令
-
定义
seq命令一般用作一堆数字的简化写法
-
语法
(seq 1 2 100)
有三个常数,其中1表示起始数,2表示跳跃的步数,100表示结束条件值
3 while循环
-
定义及作用
while循环语句也称为前测试循环语句,它的循环重复执行次数是利用一个条件来控制是否继续重复执行这个语句 -
定义
while expression do command command done
-
命令行控制的while循环
while [[ "$*" != "" ]] do echo "$1" shift done;
while循环通常与shift结合使用,其中shift命令使位置变量下移一位(即$2代替$1、$3代替\(2),并且使\)#变量递减,当最后一个参数也显示给用户后,\(#就会等于0,同时\)*也等于空
等同于 while [[ "$#" -ne 0 ]]
4 until循环
-
定义
until循环中expression的退出状态不为0时,循环体将一直执行下去,直到退出状态为0
-
语法
until expression do command command done
-
示例
#! /bin/bash i = 0; until [[ "$i" -gt 5 ]] do let "square=i*i" echo "$i * $i = $square" let "i++" done
-
while循环和until循环的区别
while循环在条件为真时继续执行循环,而until则在条件为假时执行循环
5 循环控制符
5.1 break循环控制符
-
定义及作用
break语句可以应用在for、while和until循环语句中,用于强行退出循环,也就是忽略循环体中任何其他语句和循环条件的限制。
-
说明
break语句仅能退出当前的循环,如果是两层循环嵌套,且break循环控制符在内层循环中,则break仅跳出内层循环,如果想跳出整个循环,则需要在外层循环中使用break循环控制符。
5.2 continue循环控制符
-
定义及作用
continue循环控制符应用在for、while和until语句中,用于让脚本跳过其后面的语句,执行下一次循环。
-
说明
将continue放在最内层循环体中时,仅仅是结束了本次循环执行下一次循环。
6 select结构
-
定义及作用
select是bash的扩展结构,用于交互式菜单显示,用户可以从一组不同的值中进行选择,功能类似于case结构。
-
语法
select variable in {list} do command ... break done
-
示例
#! /bin/bash echo "what is your favorite color?" select color in "red" "blue" "green" do break done echo "You have selected $color"
-
另一种select格式
select varibale do command ... break done
该格式是不带参数列表的select结构,该结构通过命令行来传递参数列表,由用户自己设定参数列表