for循环
for循环的基本结构:
for变量名 in 循环条件; do
command
done
例如:
forb in `seq 1 5`; do
echo$b
done
执行结果:打印出1~5这个序列
这里的循环条件可以写成一组字符串或者数字(用1个或多个空格隔开),也可以是一条命令的执行结果
例如:
for aa in 1 2 3 a b; do
echo $aa
done
也可以应用系统命令的执行结果,但是需要用反引号引起来:
for file in `ls`; do
echo $file
done
计算1~10的和:
表示1~10的序列除了seq 1 10外还可以用{1..10}表示
#!/bin/bash
sum=0
for i in {1..10}
do
sum=$[$sum+$i]
done
echo $sum
while循环
while循环常常用来写死循环脚本,用来监控某项服务。
while循环的格式也很简单:
while条件; do
command
done
例如:
#!/bin/bash
a=5
while[ $a -ge 1 ]; do
echo$a
a=$[$a-1]
done
另外你可以把循环条件那一个冒号代替,这样可以做到死循环,常常这样写监控脚本。下面我们用while死循环来写一个判断系统负载的脚本。
#!/bin/bash
while :; do
load=`uptime |awk '{print $(NF-2)}'|cut-d. -f1`
if [ $load -gt 10 ]
then
echo "system load ishigh."|mail -s "system load" aming@139.com
fi
sleep 10
done
uptime命令是用来查看系统负载的,我们用awk截取倒数第三段,也就是平均1分钟的系统负载。如果高于10则发邮件告警,每隔10s检查一次。但是如果负载一直高于10就会出现每隔10s发一次邮件告警,如何避免这种情况的发生,后面会介绍。
编辑回复