while条件语句 (条件满足一直循环,适合做守护进程,死循环,while是读整行,for遇见空格就另起一行)
语法
while 条件
do
指令
done
案例:
每个2秒记录一次系统负载情况
while true; do 也可以写成 while :;do
#!/bin/bash
while true
do
uptime
sleep 2
done
注:while true表示条件永远为真,因此会一直循环下去,像死循环,我们称为守护进程
用while写一个脚本1+…100的和
#!/bin/bash
sum=0
i=1
while ((i<=100))
do
((sum=sum+i))
((i++))
done
echo "sum=$sum"
这种算法如果数很大,计算效果很慢,推荐使用求和公式((sum=100*(100+1)/2)) echo $sum
相加到1000000用time可以比对出时间
time ./while2.sh
sum=500000500000
real 0m7.463s
user 0m7.191s
sys 0m0.272s
#!/bin/bash
i=1000000
((sum=1000000*(1000000+1)/2))
echo $sum
time ./sum.sh
500000500000
real 0m0.004s
user 0m0.002s
sys 0m0.000s
while 读入文件用法:
格式:
while read line;do #通过read命令读取文件的每一行内容存入line变量中
………. #执行过程
done < /要导入的文件路径
案例:统计access_apache.log日志中所有行的日志各文件访问字节总量
#!/bin/bash
sum=0
while read line #用read读入每一行
do
size=`echo $line|awk '{print $10}'`
[ "$size" == "-" ] && continue #结束本次循环继续下面循环
((sum=sum+$size))
done<access_apache.log #放在done后面可以读入文件
[ -n "$size" ] && echo "$sum"