11.while循环
- 语法:while 条件;do ...; done
- 案例1
#!/bin/bash
while : #冒号表示死循环,while为真,也可以写成1或者true
do
load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d . -f1` #这条命令会把系统的负载复制到load变量里,w查看登陆的人员
if [ $load -gt 10 ]
then
top | mail -s "load is high: $load" asldkfls@11.com
fi
sleep 30
done
[root@Chauncey ~]# w
15:37:29 up 6 days, 10 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 171.8.199.139 15:17 0.00s 0.04s 0.00s w
[root@Chauncey ~]# uptime #当前时间,系统已经运行了多久,多少用户连接目前正在使用系统,系统在过去1,5,15分钟内的平均负载。
16:06:13 up 6 days, 39 min, 1 user, load average: 0.00, 0.00, 0.00
[root@Chauncey ~]
16:06:13 up 6 days, 39 min, 1 user, load average: 0.00, 0.00, 0.00
[root@Chauncey ~]#
[root@Chauncey ~]# uptime | awk -F 'load average:' '{print $2}'|cut -d . -f1|sed 's/ //'
0
12.while循环案例2
#!/bin/bash
while :
do
read -p "Please input a number: " n
if [ -z "$n" ] #-z检测是否为空,且为空
then
echo "you need input sth."
continue #指继续执行上述的语句,再次循环
fi
n1=`echo $n|sed 's/[0-9]//g'`
if [ ! -z "$n1" ]
then
echo "you can only input a number"
continue
fi
if [ -n "$n1" ]
then
echo "you just only input numbers."
continue
fi
break #退出循环,没有break回济南如自循环
done
echo $n
13.break跳出循环
- 把整个循环结束退出,不再循环
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ] #比较数字时使用-eq,gt...,对字符串进行比较时,可以用“==”号
then
break #跳出循环
fi
echo $i
done
echo aaaaaaa
[root@Chauncey ~]# sh -x break.sh
++ seq 1 5
+ for i in '`seq 1 5 `'
+ echo
+ '[' 1 == 3 ']'
+ echo 1
1
+ for i in '`seq 1 5 `'
+ echo
+ '[' 2 == 3 ']'
+ echo 2
2
+ for i in '`seq 1 5 `'
+ echo
+ '[' 3 == 3 ']'
+ break
+ echo aaaaa
aaaaa
14.continue结束本次循环
- 忽略continue之下的代码,直接进行下一次循环
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo $i
[root@Chauncey ~]# sh -x break.sh
++ seq 1 5
+ for i in '`seq 1 5 `'
+ echo
+ '[' 1 == 3 ']'
+ echo 1
1
+ for i in '`seq 1 5 `'
+ echo
+ '[' 2 == 3 ']'
+ echo 2
2
+ for i in '`seq 1 5 `'
+ echo
+ '[' 3 == 3 ']'
+ continue
+ for i in '`seq 1 5 `'
+ echo
+ '[' 4 == 3 ']'
+ echo 4
4
+ for i in '`seq 1 5 `'
+ echo
+ '[' 5 == 3 ']'
+ echo 5
5
+ echo aaaaa
aaaaa
15.exit退出整个脚本
- 相对于break,exit直接退出,后边的语句不会执行
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
exit
fi
echo $i
done
echo aaaaaaa
[root@Chauncey ~]# sh -x break.sh
++ seq 1 5
+ for i in '`seq 1 5 `'
+ echo
+ '[' 1 == 3 ']'
+ echo 1
1
+ for i in '`seq 1 5 `'
+ echo
+ '[' 2 == 3 ']'
+ echo 2
2
+ for i in '`seq 1 5 `'
+ echo
+ '[' 3 == 3 ']'
+ exit