循环语句
在 shell 中的循环语句如下:
- for
- while
- unitl
- case
- select
for/while/unitl 必须以 done 结尾
for 循环
for 循环用来遍历数组 (数据列表) 或执行计算语句.
在 shell 中 for 循环有两种形式
第一种用来遍历 word 序列的数据 word 可以是以空格分隔的单词, 数组变量或是数字区间 / 字母区间.
示例:
循环次数为数据序列的个数, 每一次循环时会把变量 i 赋值为本次循环到的数据, 可以用在循环体中访问变量 i.
第二种, 示例:
在上面的循环中, expr1 为 i=0;expr2 为 i<10;expr3 为 i++, 其中 expr1 在循环开始之前执行, expr2 定义了运行循环的条件, expr3 在循环中执行.
while 循环
while 循环会在指定条件为真时循环执行代码块.
语法:
``list-1
可以是命令, 表达式, 如果命令或表达式一直为真则继续执行
list-2``` 直到不为真停止循环.
示例:
如果命令 ls 执行成功, 则会一直执行命令 echo, 和 ls, 直到命令执行失败.
示例 2, 使用表达式:
在上面的例子中, 首先定义了一个变量 i 赋值为 0, 然后用表达式判断 i 的值是否小于 10, 如果小于 10 则执行 while 循环体中的命令, let i++ 每执行一次 i 加 1, 当 i=10 时 i 不小于 10, 循环结束.
until 循环
until 循环是 while 循环的变体. 该循环会在检查条件是否为真之前执行一次代码块, 然后如果条件为真的话, 就会退出这个循环.
语法:
示例:
当命令 ls 执行成功时循环结束, until 循环会先判断 ls 是否执行成功, 如果成功则不继续循环, 否则继续循环, 直到命令执行成功.
与 while 循环一样, until 也可以判断表达式, 如果表达式执行成功则跳出循环.
case 语句
case 语句是一个模式匹配语句, 基于不同的条件来执行不同的动作, 语法如下:
它会用 word 尝试与 pattern 匹配, 如果匹配则运行该模式下的命令.
示例:
在上面的示例中, 将 cash.sh 传入的第一个参数做匹配, 每个模式下的命令必须以;; 结束, 而 case 语句必须以 esac 结束.* 为默认匹配, 如果前面的模式都不能匹配, 则运行该模式下的命令, 如果一个模式下不想执行命令可以输入两个分号;; 结束.
select 语句
select 语句可以打印一个选项列表, 用于与用户交互.
语法:
select 将定义一个变量 name, 然后从 word 中将用户选择的编号对应的 word 数据序列中对应的索引的值赋值给 name.
在下面的列子中, 我将 selelct 和 case 语句结合起来使用.
当执行 test.sh 脚本时,...select
将序列数据打印处理供用户选择, 而
select
只接受数字序列, 然后
case
语句将用户选择的数据做匹配, 做出相应的动作.<br/>当用户选择 1 时,
select
将其序列数据中的位置 1 的值赋值给变量
i, 传递到 case``` 语句, 然后做出相应的动作.
break 和 continue 语句
break 和 continue 可以跳出循环. 不同的是 break 会跳出循环, 而 continue 会忽略当此循环, 继续下载循环. 它们可以在 for,while,until 循环中使用.
break 语句
在上面的列子中, 当 i 等于 2 时, 当 2 % 2 == 0, 则会跳出循环, 下面的循环将不会继续.
continue 语句
在上面的列子中, 当 i % 2 == 0 时, continue 语句会终止当次循环, 继续执行下次循环, 从而输出 1-10 中的奇数.
Linux shell 编程(八): 循环结构
来源: http://www.bubuko.com/infodetail-2579524.html