while 循环用法

while 循环

1、while 条件句

语法

while 条件

do

指令集

done

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

2、until 条件句

utill 条件

do

指令集

done

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

范例1

每个5秒查看一下系统的负载情况

[[email protected] 02]# vi while.sh

#!/bin/sh

while true

do

uptime  >> uptime.log

sleep 5

done

[[email protected] 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是传参,可以任意指定

[[email protected] 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

[[email protected] 02]# sh jiuhe.sh 100

5050

[[email protected] 02]#

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

[[email protected] 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

[[email protected] 02]# sh jihe.sh 100

5050

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

用等差数列计算,效率最高

[[email protected] 02]# cat jihe.sh

#!/bin/sh

a=$1

sum=0

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

echo $sum

[[email protected] 02]# sh jihe.sh 100

5050

[[email protected] 02]# sh jihe.sh 1000000

500000500000

[[email protected] 02]#

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

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

范例2

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

用while语句实现

[[email protected] 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 !!"

[[email protected] 02]#

[[email protected] 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 !!

[[email protected] 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

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

[[email protected] 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

[[email protected] 02]#

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

没有找到合适的例子,所有我用下面的访问日志,随意找一个日志文件来获取某一个数字来计算

[[email protected] 02]# sh apache.sh

2982

[[email protected] 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

[[email protected] 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]]

[[email protected] 02]#

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

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

范例4.随便输入一个人的名字,就好产生一个4位的随机数,并且随机数的第一位不能为0.如果是0,重新生成一个四位随机数。

[[email protected] 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

[[email protected] 03]#

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

[[email protected] 03]# sh ran.sh xia

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

[[email protected] 03]# sh ran.sh xia0

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

[[email protected] 03]# sh ran.sh xia3

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

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

范例5,每隔10秒同步mysqlbinlog同步,守护进程方式

while true

do

rsync -az /application/mysql/data/mysql-bin*  [email protected]::backup --password-file=/etc/rsync.password

sleep 10

done

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

while 循环小结

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

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

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

时间: 2024-12-15 16:21:59

while 循环用法的相关文章

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

增强for循环用法___ArrayList数组实现使用下标最好,LinkedList使用增强型的(转载)

总结: 1.For-Each循环的缺点:丢掉了索引信息. 当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息. 增强for循环用法 1.首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的, 但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容.不能获取下标等.2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环.

Django template for 循环用法

当列表为空或者非空时执行不同操作: {% for item in list %} ... {% empty %} ... {% endfor %} 使用forloop.counter访问循环的次数,下面这段代码依次输出循环的次数,从1开始计数: {% for item in list %} ... {{ forloop.counter }} ... {% endfor %} 从0开始计数: {% for item in list %} ... {{ forloop.counter0 }} ...

smarty模板section循环用法

{foreach name=foreach_name key=k item=v from=$arr} {$k}=>{$v}<br/> {/foreach} {section name=sec_name loop=$arr start=0 step=n max= m show=true/false } {if is_array($arr[sec_name])} {section name=sec2 loop=$arr[sec_name]} {$arr[sec_name][sec2]}<

java outterLoop跳出多重循环用法以及详解

List<CommResultMsg> listresult=new ArrayList<CommResultMsg>(); outterLoop :for (int i = 0; i < model.size()-1; i++) { for (int j = model.size()-1; j > i; j--) { if (model.get(j).getLoaneeApplyId()==model.get(i).getLoaneeApplyId()) { resu

Java for循环用法

Java中for循环多了一种写法--foreach写法(一般仅仅用于遍历整个数组,不用操心越界等问题). 1.1)常规写法: package foreach.main.sn; public class Foreach { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for (int i = 0; i < arr.length; ++i){ System.out.println(arr[i]); } } } 1

for 循环用法

for循环结构 语法1. for 变量名 in 变量取值列表 do 指令集 done 提示:在此结构中"in 变量取值列表 "可省略,省略时相当于in "[email protected]" 使用for i 就相当于使用 for i in "[email protected]" ========================= 语法2. 类似C语言 for ((表达式1;表达式2;表达式3)) do 指令集 done 其中表达式1是初始变量 表

bash while until 循环用法

首先, bash中命令执行成功返回状态码 0, 失败返回非0状态码(以下$是终端提示符) $ true; echo $? 0 $ false; echo $? 1 1. while $ while true; do echo good; break; done good $ while [ 1 -eq 1 ]; do echo good; break; done good $ while ps -ef | grep grep; do echo good; break; done good 2.

内外层循环用法

3个班级各4名学员参赛,计算每个班级参赛学员平均分,统计成绩大于85分学员总数思路: 外层循环控制班级 内层循环控制某个班级的每名学生成绩 成绩不大于85,sum++ 成绩大于85,count 1 int count=0; 2 int avg; 3 Scanner input=new Scanner(System.in); 4 for(int i=1;i<4;i++) 5 { 6 int sum=0;//没班级开始总成绩清零 不至于叠加 7 for(int j=1;j<5;j++) 8 { 9