【Shell 脚本速成】09、Shell 循环控制语句 for

目录

一、循环控制 break 语句

二、循环控制 continue 语句

三、循环控制 sleep

四、参数控制命令-shift

五、脚本退出命令 exit

总结

六、for 嵌套

6.1 for 嵌套 if

七、for 与数组

7.1 使用 for 循环遍历读出数组

7.2 使用 for 循环进行数组存值


 

一、循环控制 break 语句

作用: 终止循环,执行循环体后面的代码

案例:

循环打印输出数字1到9,当执行输出到5时终止循环。

[root@shell ~]# vim for-4.sh
#!/bin/bash 
for i in `seq 1 9`
do
        echo $i
        if [ $i -eq 5 ];then
                break
        fi
done

echo "执行完毕"

[root@shell ~]# sh for-4.sh
1
2
3
4
5
执行完毕

跳出本次循环语句,继续执行后续代码:echo "执行完毕"

二、循环控制 continue 语句

作用: 跳过某次循环,继续执行下一次循环;表示循环体内下面的代码不执行,重新开始下一次循环。

案例:
循环打印输出数字1到9,当执行输出到5时跳过本次循环。

[root@shell ~]# vim for-5.sh
#!/bin/bash

for ((i=1;i<10;i++))
do
        if [ $i -eq 5 ];then
                continue
        else
                echo $i
        fi

done
echo "执行完毕"

[root@shell ~]# sh for-5.sh
1
2
3
4
6
7
8
9
执行完毕

跳过第5次循环,继续执行下一次(第6次)循环。 

三、循环控制 sleep

作用: 控制循环的节奏,控制循环频率

        当执行一个无限循环语句的时候,如果任意其循环那么该循环就会疯狂的消耗计算机的内存和CPU资源,消耗最大的就是CPU,所以一个循环不可能让其肆意循环,必须控制其循环的节奏,可以使用sleep语句来完成。

案例:
写一个倒计时程序:从9到1,每秒倒数一次。

[root@shell ~]# vim for-6.sh
#!/bin/bash

echo -n "倒计时: "
for i in `seq 9 -1 1`
do
      echo -n -e "\b$i"
      sleep 1
done

echo 
echo "执行完毕"


# sleep 单位秒

效果展示:

四、参数控制命令-shift

作用: 外部传参到循环时,参数管理命令

每次循环,使位置参数向左移动,默认移动1位,可以使用 shift 2 (移到两位),传参应是 N 的整数倍

案例:
通过外部传参的方式向脚本内的循环传递参数,要求打印每次循环使用的参数。

[root@shell ~]# vim for-7.sh
#!/bin/bash

# 判断外传参的数量
[ $# -lt 3 ]&&echo '请输入至少三个参数:'$0' $1 $2 $3 ...'&&exit 1

# 将参数的数量赋值给count
count=$#

# 通过shift左移参数输出
# 使位置参数向左移动,默认移动1位,可以使用shift 2 传参要是N的整数倍
for ((i=1;i<=$count;i++))
  do
    echo '参数数量: '$#''
    echo '当前$1的数值是: '$1''
    shift 1
    sleep 1
done
echo "执行完毕"

[root@shell ~]# sh for-7.sh 1 3 5 7 8 9 10
参数数量: 7
当前$1的数值是: 1
参数数量: 6
当前$1的数值是: 3
参数数量: 5
当前$1的数值是: 5
参数数量: 4
当前$1的数值是: 7
参数数量: 3
当前$1的数值是: 8
参数数量: 2
当前$1的数值是: 9
参数数量: 1
当前$1的数值是: 10
执行完毕

五、脚本退出命令 exit

作用: 退出程序并释放占用的系统资源

案例:
循环输出数字1-9,当循环到5时退出脚本。

[root@shell ~]# vim for-8.sh
#!/bin/bash

for i in `seq 1 9`
  do
      echo $i
      if [ $i -eq 5 ]
        then
           exit 0  
        fi
done
echo "执行完毕"

[root@shell ~]# sh for-8.sh 
1
2
3
4
5

总结

  • continue:退出本次循环,进入下一次循环
  • break:退出for循环,但是会执行for循环之外的代码
  • exit:退出整个程序

六、for 嵌套

6.1 for 嵌套 if

循环中需要判断

案例:
输出1-9,当输出5时停止输出

#!/bin/bash

for ((num=1;num<10;num++))
   do
     echo $num
     [ $num -eq 5 ]&& break
done

6.2 for 嵌套 for

循环中再有循环

案例:

打印99乘法表 

[root@shell ~]# vim for-9.sh
#!/bin/bash

for ((A=1;A<10;A++));do
        for ((B=1;B<=$A;B++));do
                echo -n -e "$B*$A=$((A*B))\t"
        done
        # 换行
        echo
done

[root@shell ~]# sh for-9.sh
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

七、for 与数组

for 循环与数组

7.1 使用 for 循环遍历读出数组

[root@shell ~]# vim for-10.sh
#!/bin/bash

array=(a b c d e f g)
count=${#array[*]}

for ((i=0;i<$count;i++));do
        echo "array[$i]=${array[$i]}"
done

[root@shell ~]# sh for-10.sh
array[0]=a
array[1]=b
array[2]=c
array[3]=d
array[4]=e
array[5]=f
array[6]=g

7.2 使用 for 循环进行数组存值

[root@shell ~]# vim for-11.sh
#!/bin/bash

for ((i=0;i<5;i++));do
        read -p "char: " ch
        array[$i]=$ch
done

for ((i=0;i<5;i++));do
        echo "array[$i]=${array[$i]}"
done

[root@shell ~]# sh for-11.sh
char: 1
char: 2
char: 3
char: 4
char: 5
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5

上一篇文章:【Shell 脚本速成】08、Shell 流程控制——for 循环语句_Stars.Sky的博客-CSDN博客

参考文档:循环控制语句-组团学

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stars.Sky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值