循环语句
在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语句将用户选择的数据做匹配,做出相应的动作。 当用户选择1时,
select将其序列数据中的位置1的值赋值给变量
i,传递到
case```语句,然后做出相应的动作。
break
和continue
语句
break
和continue
可以跳出循环。不同的是break
会跳出循环,而continue
会忽略当此循环,继续下载循环。它们可以在for
,while
,until
循环中使用。
break
语句
在上面的列子中,当i
等于2时,当2 % 2 == 0
,则会跳出for
循环,下面的循环将不会继续。
continue
语句
在上面的列子中,当i % 2 == 0
时,continue
语句会终止当次循环,继续执行下次循环,从而输出1-10中的奇数。