本帖最后由 xhz 于 12-29 编辑
在编程语言中,while循环(英语:while loop)是一种控制流程的陈述。利用一个返回结果为布林值(Boolean)的表达式作为循环条件,当这个表达式的返回值为“真”(true)时,则反复执行循环体内的程式码;若表达式的返回值为“假”(false),则不再执行循环体内的代码,继续执行循环体下面的代码。
因为while循环在区块内代码被执行之前,先检查陈述是否成立,因此这种控制流程通常被称为是一种前测试循环(pre-test loop)。相对而言do while循环,是在循环区块执行结束之后,再去检查陈述是否成立,被称为是后测试循环。
shell中while语法
while 条件
do
命令
done
while 使用场景
多用于创建守护进程
【示例1】:while实现web服务器搭建
脚本代码
[root@clsn scripts]# vim web_view.sh
#!/bin/bash
#############################################################
# File Name: web_view.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-11 10:07:24
# Description:
#############################################################
while true
do
echo "ok" | nc -l 81
done
客户端进行访问测试
[root@clsn html]# curl 10.0.0.180:81
ok
服务端显示结果:
[root@clsn scripts]# sh web_view.sh
GET / HTTP/1.1
User-Agent: curl/7.29.0
Host: 10.0.0.180:81
Accept: */*
【示例2】:while创建定时任务
脚本内容:
#!/bin/bash
while true
do
uptime
sleep 0.6
done
脚本执行结果
[root@clsn while]# sh while1.sh
15:01:52 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
15:01:53 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
15:01:53 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
15:01:54 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
15:01:55 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
15:01:55 up 2 days, 6:02, 3 users, load average: 0.00, 0.01, 0.05
说明:
sleep 与 usleep
sleep 单位 秒 sleep 1 休息1秒
usleep 单位 微秒 usleep 1000000 休息1s
1微秒等于百万分之一秒(10的负6次方秒)
时间测试
[root@clsn while]# time sleep 0.1
real 0m0.102s
user 0m0.001s
sys 0m0.000s
1.3.3 while 作用
补充定时任务功能,执行小于1秒的定时任务
循环执行某些操作,例如水果菜单
http://www.cnblogs.com/clsn/p/8006210.html (1.3.6)
示例1:使用while循环实现水果菜单的重复使用
脚本内容
View Code 使用while循环实现水果菜单的重复使用
脚本执行过程
示例2:计算1-100的和
方法一 (bc命令实现)
echo `seq -s + 1 100`|bc
方法二(while循环方法)
[root@clsn while]# cat jishan.sh
#!/bin/bash
#############################################################
# File Name: jishan.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-09 15:18:44
# Description:
#############################################################
i=1
while [ "$i" -le 100 ]
do
((b=b+i))
((i++))
done
echo $b
示例3:实现类似手机通讯计费功能
脚本内容:
1 [root@clsn scripts]# cat while/shouji.sh
2 #!/bin/bash
3 #############################################################
4 # File Name: shouji.sh
5 # Version: V1.0
6 # Author: clsn
7 # Organization: http://blog.znix.top
8 # Created Time : 2017-12-09 15:56:09
9 # Description:
10 #############################################################
11 sum=1000
12 i=15
13
14
15 while [ $sum -ge 15 ]
16 do
17 cat<<EOF
18 =================
19 1.发短信
20 2.查余额
21 3.账户充值
22 4.退出
23 =================
24 EOF
25 read -p "你要做什么呢?" Some
26 case "$Some" in
27 1)
28 sum=$((sum-i))
29 read -p "请输入发送短信的内容:"
30 read -p "请输入收信人:"
31 sleep 0.3
32 echo "发送成功."
33 echo "您当前余额为$sum"
34 ;;
35 2)
36 echo "您当前余额为$sum"
37 ;;
38 3)
39 read -p "请输入你要充值的金额:" ChongZhi
40 sum=$((sum+ChongZhi))
41 echo "充值成功,当前余额为$sum"
42 ;;
43 4)
44 exit
45 ;;
46 *)
47 echo "输入有误!"
48 exit 2
49 esac
50 done
51
52 echo "余额不足,请及时充值!"
|