while 循环

2016-10-12

while 循环

while 循环常常用来写死循环脚本,用于监控某项服务。

简单的 while 脚本

[root@133 ~]# vim while.sh
#!/bin/bash

a=5

while [ $a -ge 1 ];do
  echo $a
  a=$[$a-1]
done

执行结果:

[root@133 ~]# sh while.sh
5
4
3
2
1


while 循环的格式:

 while 条件; do
   command
 done


另外可以把循环条件用一个冒号代替,这样可以做到死循环:

 while :; do
   command
   sleep 3
 done


下面写一个判断系统负载的脚本:

[root@133 ~]# vim load.sh
#!/bin/bash

while :; do
    load=`uptime|awk '{print $(NF-2)}'|cut -d. -f1`
    if [ $load -gt 10 ];then
       echo "system load is high."|mail -s "system load" test1@163.com
    fi
    sleep 10
done

  说明:uptime 命令是用来查看系统负载的,我们用 awk 截取倒数第三段,也即是平均 1 分钟的系统负载,然后只取整数部分。如果负载高于 10 则会发邮件告警。每隔 10 秒检查一次。但是,如果系统负载一直高于 10,那么将会出现每隔 10s 发一次邮件的窘况,所以要采取手段避免这种情况发生。