1 for循环
语法结构如下:
- for 变量名 in 值1 值2 值3 #值的数量决定循环任务的次数
- do
- 命令序列
- done
1.1 for循环的基本语法格式
#编写脚本,进行测试
[root@localhost opt]# vim for01.sh
#!/bin/bash
for i in a b c
do
echo "hello world"
done
[root@localhost opt]# bash for01.sh #输出查看结果
ok
ok
ok
#编写脚本,输出i查看结果
[root@localhost opt]# vim for02.sh
#!/bin/bash
for i in a b c
do
echo ok
echo $i
done
[root@localhost opt]# bash for02.sh #输出查看结果
ok
a
ok
b
ok
c
#通过循环批量显示10个数字
#!/bin/bash
for i in {1..10} #{1..10}表示1-10之间的数字
do
echo $i
done
#如果循环次数是通过变量决定可以用seq指令
#!/bin/bash
a=10
for i in `seq $a`
do
echo "$i"
done
#编写脚本,批量创建账户
#!/bin/bash
for i in $(cat /opt/name.txt) #循环批量创建name.txt里面所有账户,文档中每行是一个名字,该文档要提前创建,与脚本在同一目录下即可
do
useradd $i
done
vim /opt/name.txt
zhangsan
lisi
wangwu
zhaoliu
1.2 c语言风格的for循环语法格式
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo $i
done
通过多重for循环打印九九乘法表
[root@localhost opt]# vim for99.sh
#!/bin/bash
for i in {1..9}
do
for ((j=1;j<=i;j++))
do
printf "%-8s" $j*$i=$((j*i)) #%s是格式替代符,%-8s指一个宽度为8个字符(-表示左对齐,没有则表示右对齐)
done
echo
done
[root@localhost opt]# bash for99.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
2 while循环
while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定操作,直到条件不成立为止。
所以while循环的条件一般通过变量来控制,在循环体内对变量做相应改变,以便在适当的时候退出,避免陷入死循环。
使用while循环,语法结构如下所示:
- while 条件测试
- do
- 命令序列
- done
while循环基本用法
2.1 有效循环脚本
[root@localhost opt]# vim while03.sh
#!/bin/bash
i=1
while [ $i -le 5 ] #判断i是否小于等于5
do
echo "$i"
let i++
done
2.2 死循环脚本
[root@localhost opt]# vim while01.sh
#!/bin/bash
i=1
while [ $i -le 5 ] #判断i是否小于等于5
do
echo "abc"
done
[root@localhost ~]# chmod +x while01.sh #添加执行权限
[root@localhost ~]# ./while01.sh #死循环,需要使用Ctrl+C终止脚本
#死循环的另一种格式
#!/bin/bash
while : #冒号可以表示条件为真
do
echo "abc"
sleep 0.1 #每次循环休息0.1秒
done
3 控制循环中断的三种命令
exit:退出整个循环,同时退出整个脚本
[root@localhost opt]# vim while02.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && exit #i=3时退出本次脚本
echo $i
done
echo ok
[root@localhost opt]# bash while02.sh #结果看到循环后面的任务没有执行
1
2
break:退出本次循环,继续循环后的任务
[root@localhost opt]# vim while03.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && break #i=3时退出循环
echo $i
done
echo ok
[root@localhost opt]# bash while03.sh #结果看到循环后面的任务执行了
1
2
ok
continue:退出本次循环,进行下一次循环
[root@localhost opt]# vim while03.sh
#!/bin/bash
for i in {1..5}
do
[ $i -eq 3 ] && continue #i=3 时退出本次循环,进入下次循环
echo $i
done
echo ok
[root@localhost opt]# bash while03.sh #看到i=3时的循环任务没有执行
1
2
4
5
ok