while循环语法:while 条件;do .......;done
案例1:写一个监控负载的脚本:
[root@localhost_02 shell]# cat while.sh
#!/bin/bash
while :
#冒号表示循环,此处可以用1或者true都可以;
do
load=`uptime|awk -F 'load average: ' '{print $2}'|cut -d . -f1`
if [ $load -ge 10 ]
then
/usr/local/sbin/mail.py xxx@163.com "load high" "$load"
fi
sleep 30
#休眠30秒后,继续检测系统的负载;
done
[root@localhost_02 shell]# sh -x while.sh
+ :
++ awk -F 'load average: ' '{print $2}'
++ cut -d . -f1
++ uptime
+ load=0
+ '[' 0 -ge 10 ']'
+ sleep 30
若想这种脚本不意外的终止,可以打开screen,在screen跑脚本;
注释:
uptime表示查看awk系统的负载,(可以用w,不过需要结合head -1使用):
awk -F 'load average: ' '{print $2} 表示以load average为分隔符,并打印第二端:
cut -d . -f1 表示用cut命令以 . 点作为分隔符,取第一个字符:
while循环案例2:输入一个数字,如果不是数字,则一直输入,输入是数字后则正常显示:
[root@localhost_02 shell]# cat while1.sh
#!/bin/bash
while :
do
read -p "Please input number: " n
if [ -z "$n" ]
then
echo "you need input sth"
continue
fi
n1=`echo $n|sed s/[0-9]//g`
if [ -n "$n1" ]
then
echo "you just only input numbers"
continue
fi
break
done
echo $n
[root@localhost_02 shell]# sh while1.sh
Please input number:
you need input sth
Please input number:
you need input sth
Please input number: sdfs
you just only input numbers
Please input number: 2
2
注释:contiune 继续循环:
break:用于循环语句,直接结束所有循环:当数字等于3时,则结束所有循环:
注释:如下图例表示结束了if和for循环,然后继续打印echo内容:
[root@localhost_02 shell]# cat break.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i -eq 3 ]
#比较数字,用-eq ;若是比较的是字符串,那需要用 ==
then
break
fi
echo $i
done
echo aaaaa
检测:
[root@localhost_02 shell]# sh -x break.sh
++ seq 1 5
+ for i in '`seq 1 5`'
+ echo 1
1
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ echo 2
2
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ echo 3
3
+ '[' 3 -eq 3 ']'
+ break
+ echo aaaaa
aaaaa
[root@localhost_02 shell]# sh break.sh
1
1
2
2
3
aaaaa
[root@localhost_02 shell]#
continue:结束本次循环,忽略continue下面的代码,直接进行下一次循环:
注释:如下图例表示忽略了本次continue下的代码(条件是等于3),其余代码正常运行:
[root@localhost_02 shell]# cat con.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i -eq 3 ]
then
continue
fi
echo $i
done
echo bbbbb
[root@localhost_02 shell]# sh con.sh
1
1
2
2
3
4
4
5
5
bbbbb
exit:退出整个脚本,用来确定脚本运行到什么位置时结束:
注释:如下图例表示直接退出整个脚本了:
[root@localhost_02 shell]# cat exit.sh
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i -eq 3 ]
then
exit
fi
echo $i
done
echo $ccccc
[root@localhost_02 shell]# sh exit.sh
1
1
2
2
3