while 循环

1、while 条件句

语法

while 条件

do

指令集

done

###########################

2、until 条件句

utill 条件

do

指令集

done

##########################

[root@LAMP 02]# vi while.sh

#!/bin/sh

while true

do

uptime  >> uptime.log

sleep 5

done

[root@LAMP 02]# tailf uptime.log

22:46:21 up  8:52,  5 users,  load average: 0.00, 0.00, 0.00

22:46:22 up  8:52,  5 users,  load average: 0.00, 0.00, 0.00

22:46:26 up  8:52,  5 users,  load average: 0.00, 0.00, 0.00

22:46:27 up  8:53,  5 users,  load average: 0.00, 0.00, 0.00

22:46:31 up  8:53,  5 users,  load average: 0.00, 0.00, 0.00

22:46:32 up  8:53,  5 users,  load average: 0.00, 0.00, 0.00

22:46:36 up  8:53,  5 users,  load average: 0.00, 0.00, 0.00

=======================================

范例2 ：计算1+2+3+...+n 之和，n是传参，可以任意指定

[root@LAMP 02]# cat jihe.sh

#!/bin/sh

a=$1 b=1 sum=0 while [$b -le $a ] do let sum=$sum+$b let b++ done echo$sum

[root@LAMP 02]# sh jiuhe.sh 100

5050

[root@LAMP 02]#

=======================

[root@LAMP 02]# cat jihe.sh

#!/bin/sh

a=$1 b=1 sum=0 while [$b -le $a ] do sum=$(($sum+$b))

b=$(($b+1))

done

echo $sum [root@LAMP 02]# sh jihe.sh 100 5050 ======================= 用等差数列计算，效率最高 [root@LAMP 02]# cat jihe.sh #!/bin/sh a=$1

sum=0

sum=$(($(($a*$((1+$a))))/2)) echo$sum

[root@LAMP 02]# sh jihe.sh 100

5050

[root@LAMP 02]# sh jihe.sh 1000000

500000500000

[root@LAMP 02]#

=========================

######################################

范例2

手机充值100元，每次打电话3元，当余额低于0元的时候，提示余额不足，请充值

用while语句实现

[root@LAMP 02]# cat while.sh

#!/bin/sh

m=100

while [ $m -ge 0 ] do echo "send message :m =$m "

let m=m-3

sleep 2

done

echo "money is not enough $m : pleses input momey !!" [root@LAMP 02]# [root@LAMP 02]# sh while.sh send message :m = 100 send message :m = 97 send message :m = 94 send message :m = 91 send message :m = 88 ... ... send message :m = 13 send message :m = 10 send message :m = 7 send message :m = 4 send message :m = 1 money is not enough -2 : pleses input momey !! [root@LAMP 02]# ###################################### 范例3 计算apache一天的日志 access.log 中所有行的的日志各元素的访问字节数总和，给出实现程序。 提示： 获取文件内容的方法： 方法1 cat a.log |while read line do done ============== 方法2、 while read line do done < a.log ============== 方法3、 exec <a.log while read line do done ============== [root@LAMP 02]# cat apache.sh #!/bin/sh sum=0 i=0 while read line do i=$(echo $line |awk '{print$10}')

if expr $i + 1 &>/dev/null then sum=$(($sum+$i))

fi

done  < access.log

echo $sum [root@LAMP 02]# ################### 没有找到合适的例子，所有我用下面的访问日志，随意找一个日志文件来获取某一个数字来计算 [root@LAMP 02]# sh apache.sh 2982 [root@LAMP 02]# cat apache.sh #!/bin/sh sum=0 i=0 while read line do i=$(echo $line |awk '{print$3}' |awk -F'=' '{print $3}'|cut -c 10 ) #echo$i

expr $i + 1 &>/dev/null a=$?

if [ $a -eq 0 ] then sum=$((sum+i))

fi

done  < access.log

echo $sum [root@LAMP 02]# head -3 access.log [172.16.0.183][18/Sep/2015:00:05:03 +0800][GET /url?a=115020310073&&u=104300025226300150914&b=460036361697955&c=A1000037D69C7C&g=0&s=0&v=5.2.27.4ctch1&p=0&id=20150917220000&f=0 HTTP/1.1][200][31]0 [172.16.0.182][18/Sep/2015:00:05:03 +0800][GET /url?a=115020310073&&u=104300009080897150319&b=460031390615622&c=A000004F85440D&g=0&s=0&v=5.2.27.4ctch1&p=0&id=20150917220000&f=0 HTTP/1.1][200][31]0 [172.16.0.184][18/Sep/2015:00:05:03 +0800][GET /url?a=115020310073&&u=104300024401506150906&b=460036860899028&c=A100004818C4B6&g=0&s=0&v=5.2.27.4ctch1&p=0&id=20150917220000&f=0 HTTP/1.1][200][31]0 [root@LAMP 02]# ################### ######################################################################### 范例4.随便输入一个人的名字，就好产生一个4位的随机数，并且随机数的第一位不能为0.如果是0，重新生成一个四位随机数。 [root@LAMP 03]# cat ran.sh #!/bin/sh a=$1

while true

do

num=echo $RANDOM|cut -c 1-4 b=echo$num|cut -c 1

if [ $b -gt 0 ] then echo "$a=========>\$num"

exit 0

fi

done

[root@LAMP 03]#

=======================

[root@LAMP 03]# sh ran.sh xia

xia=========>3121

[root@LAMP 03]# sh ran.sh xia0

xia0=========>7314

[root@LAMP 03]# sh ran.sh xia3

xia3=========>1818

#########################################################################

while true

do

sleep 10

done

########################

while 循环小结

1、while循环的特长是执行守护进程，已经希望循环不退出持续执行，用于频率小于1分钟的循环出了，，其他的while循环几乎都可以用for循环来代替

2、case语句可以用if语句替换，一般在系统启动脚本传入少量固定规则字符串时用case，其他多用if代替

3、if、for语句最常用，其次while（守护进程）、case(服务启动脚本)。