shell结构化命令——嵌套循环

本文详细介绍了在Bashshell中如何使用嵌套循环,包括for、while和until循环的嵌套实例,以及循环结构中do-done命令的作用。通过实例演示了不同循环结构的混合使用和注意事项。
摘要由CSDN通过智能技术生成

循环语句可以在循环内使用任意类型的命令,包括其他循环命令,这称为嵌套循环。注意,在使用嵌套循环时是在迭代中再进行迭代,命令运行的次数是乘积关系。不注意这点有可能会在脚本中造成问题。

来看一个嵌套for循环的简单例子:

$ cat test14
#!/bin/bash
# nesting for loops

for (( a = 1; a <= 3; a++ ))
do
    echo "Starting loop $a:"
    for (( b = 1; b <= 3; b++ ))
    do
        echo "    Inside loop: $b"
    done
done
$ ./test14
Starting loop 1:
    Inside loop: 1
    Inside loop: 2
    Inside loop: 3
Starting loop 2:
...

这个被嵌套的循环(也称为内层循环)会在外部循环的每次迭代中遍历一遍它所有的值。注意,两个循环的do命令和done命令没有任何差别。bash shell知道执行第一个done命令时,指的是内层循环而非外层循环。

在混用循环命令时也一样,比如在while循环内部放置for循环:

$ cat test15
#!/bin/bash
# placing a for loop inside a while loop

var1=5

while [ $var1 -ge 0 ]
do
    echo "Outer loop: $var1"
    for (( var2 = 1; var2 < 3; var2++ ))
    do
        var3=$[ $var1 * $var2 ]
        echo " Inner loop: $var1 * $var2 = $var3"
    done
    var1=$[ $var1 - 1 ]
done
$ ./test15
Outer loop: 5
 Inner loop: 5 * 1 = 5
 Inner loop: 5 * 2 = 10
Outer loop: 4
...

同样,shell能够区分开内层for循环和外层while循环各自的do命令和done命令。

如果真的想锻炼一下大脑,甚至可以混用until循环和while循环:

$ cat test16
#!/bin/bash
# using until and while loops

var1=3

until [ $var1 -eq 0 ]
do
    echo "Outer loop: $var1"
    var2=1
    while [ $var2 -lt 5 ]
    do
        var3=$(echo "scale=4; $var1 / $var2" | bc)
        echo "    Inner loop: $var1 / $var2 = $var3"
        var2=$[ $var2 + 1 ]
    done
    var1=$[ $var1 - 1 ]
done
$ ./test16
Outer loop: 3
    Inner loop: 3 / 1 = 3.0000
    Inner loop: 3 / 2 = 1.5000
    Inner loop: 3 / 3 = 1.0000
    Inner loop: 3 / 4 = .7500
Outer loop: 2
...

外层的until循环以值3开始并会持续执行,直到值等于0。内层的while循环以值1开始并会持续执行,只要值小于5。每个循环都必须修改在测试条件中用到的值,否则循环就会无止境进行下去。 

 

 

 

 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值