目录
一、循环控制 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博客
参考文档:循环控制语句-组团学