Shell之循环结构
一、while循环
1、语法
while 条件 do 指令... done
2、实例
- 每隔2s打印系统负载
#!/bin/sh while true do printf "`uptime`\n" sleep 1 done
- 计算数字1-100的和
#!/bin/sh i=100 sum=0 while [ $i -ge 1 ] do ((sum=sum+i)) ((i=i-1)) done echo "$sum"
当然更高效的方式是利用等差数列的公式进行计算。
3、总结
while循环的特长是执行守护进程,循环不退出持续执行,可用于秒级的定时任务。补偿crond只能分钟级的不足。
二、for循环
1、语法
for 变量名 in 变量取值列表 do 指令... done
2、实例
- 打印3、2、1三个数
# 法一 #!/bin/sh for i in 3 2 1 do echo "$i" done # 法二 #!/bin/sh for i in {3..1} do echo "$i" done # 法三 #!/bin/sh for i in `seq 3 -1 1` do echo "$i" done
- 计算数字1-100的和
#!/bin/sh j=0 for((i=0; i<=100;i++)) do ((j=j+i)) done echo "$j"
-
判断在线用户
在生产场景中,比如判断10.0.0.0/24网络中,当前在线的用户有哪些?判断思路:(1)ping通在线(2)ping通返回值为0
#!/bin/sh for i in `seq 254` do ping -c2 10.0.0.$i > /dev/null 2>&1 if [ $? -eq 0 ] then echo "10.0.0.0.$i is online" >> ./online.log else echo "10.0.0.0.$i is offline" >> ./offline.log fi done
- 批量创建用户
#!/bin/sh for i in `seq -w 5` do useradd test$i && echo"testpass$i"|passwd --stdin test$i done
三、循环控制
上面是while、if循环,但是如果控制循环的走向呢?比如提前终结循环、跳出当次循环等,这里就可以使用:
- break
- continue
- exit
上面三个关键词不仅仅用于控制循环,还可以用于控制if等条件语句。
| 关键词 | 说明 |
| break n | n表示跳出循环的层数,如果省略n表示跳出整个循环 |
| continue n | n表示退到第n层继续循环,如果省略n表示跳过本次循环,忽略本次循环剩下的代码,进入下一次循环 |
| exit n | 退出当前shell程序,n为返回值 |
为了更好的说明三者之间的区别,如下所示实例:
#!/binsh for((i=0;i<5;i++)) do if [ $i -eq 3 ] then #continue #break exit fi echo $i done echo "end"
- continue的输出
[root@localhost loop]# sh continue.sh 0 1 2 end
- break的输出
[root@localhost loop]# sh break.sh 0 1 2 end
- exit的输出
[root@localhost loop]# sh exit.sh 0 1 2
可以看出continue是跳出本次循环,继续下次的循环;break是退出循环,执行后面的代码;exit是直接跳出shell。
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号