当型循环和直到型循环:
循环语句常用于重复执行一条指令或一组指令,直到条件不满足时停止。
在企业实际应用中,常用于守护进程或者持续运行的程序。
while语法结构:
while 条件
do
指令...
done
while循环语句对后面的条件表达式进行判断,如果条件表达式成立,就执行while循环体中的民工或者语句,每次执行到done时候,就重新判断while条件表达式是否成立,直到条件表达式不成立时才会跳出while循环体。如果一开始条件表达式不成立,那么程序就不会进入循环体中执行命令了。
示例1: 每隔2秒输出一次系统负载uptime。
[root@vm1 scripts]# cat while1.sh
#!/bin/bash
while true
do
uptime
sleep 2
done
执行结果:
[root@vm1 scripts]# sh while1.sh
20:37:01 up 3:49, 1 user, load average: 0.00, 0.01, 0.05
20:37:03 up 3:49, 1 user, load average: 0.00, 0.01, 0.05
20:37:05 up 3:49, 1 user, load average: 0.00, 0.01, 0.05
20:37:07 up 3:49, 1 user, load average: 0.00, 0.01, 0.05
^C
while true 表示的是永远为真,因此会一直运行,象死循环一样,但是我们称呼为守护进程。
示例2:
[root@vm1 scripts]# cat while2.sh
#!/bin/bash
while true
do
uptime >> /tmp/uptime.log
sleep 2
done
执行情况:
[root@vm1 scripts]# sh while2.sh &
[1] 1983
[root@vm1 scripts]# tail -f /tmp/uptime.log
20:44:23 up 3:56, 1 user, load average: 0.00, 0.01, 0.05
20:46:19 up 3:58, 1 user, load average: 0.00, 0.01, 0.05
20:46:21 up 3:58, 1 user, load average: 0.00, 0.01, 0.05
20:46:23 up 3:58, 1 user, load average: 0.00, 0.01, 0.05
20:46:25 up 3:58, 1 user, load average: 0.00, 0.01, 0.05
在实际的工作中,一般会通过客户端ssh连接到服务器,因此可能会在脚本或者命令执行期间不能中断的需求,若中断,则会前功尽弃,更要命的是破坏系统数据。
防止脚本执行中断的方法:
1)sh while2.sh & 使用&在后台运行脚本。
2)screen命令;
3)nohup sh while2.sh & 使用nohup加&在后台运行脚本。
示例3: 使用while竖向打印54321。
[root@vm1 scripts]# cat while3.sh
#!/bin/bash
i=5
while [ $i -gt 0 ]
do
echo "$i"
((i--))
done
执行结果:
[root@vm1 scripts]# sh while3.sh
5
4
3
2
1
示例4: 计算从1到100之和。
[root@vm1 scripts]# cat while4.sh
#!/bin/bash
#
i=1
sum=0
while [ $i -le 100 ]
do
((sum=sum+i))
((i++))
done
printf "totalsum is: $sum\n"
执行结果:
[root@vm1 scripts]# sh while4.sh
totalsum is: 5050
代码说明:正常输出使用echo就能输出,使用printf可以显示比较格式化一点的字符串信息。