while循环语法:while 条件;do .......;done
案例1:写一个监控负载的脚本:
[root@localhost_02 shell]# cat while.sh #!/bin/bashwhile :#冒号表示循环,此处可以用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/bashwhile :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 breakdone echo $n[root@localhost_02 shell]# sh while1.sh Please input number: you need input sthPlease input number: you need input sthPlease input number: sdfsyou just only input numbersPlease input number: 22
注释:contiune 继续循环:
break:用于循环语句,直接结束所有循环:当数字等于3时,则结束所有循环:
注释:如下图例表示结束了if和for循环,然后继续打印echo内容:
[root@localhost_02 shell]# cat break.sh #!/bin/bashfor i in `seq 1 5`do echo $i if [ $i -eq 3 ]#比较数字,用-eq ;若是比较的是字符串,那需要用 == then break fi echo $idoneecho aaaaa检测:[root@localhost_02 shell]# sh -x break.sh ++ seq 1 5+ for i in '`seq 1 5`'+ echo 11+ '[' 1 -eq 3 ']'+ echo 11+ for i in '`seq 1 5`'+ echo 22+ '[' 2 -eq 3 ']'+ echo 22+ for i in '`seq 1 5`'+ echo 33+ '[' 3 -eq 3 ']'+ break+ echo aaaaaaaaaa[root@localhost_02 shell]# sh break.sh 11223aaaaa[root@localhost_02 shell]#
continue:结束本次循环,忽略continue下面的代码,直接进行下一次循环:
注释:如下图例表示忽略了本次continue下的代码(条件是等于3),其余代码正常运行:
[root@localhost_02 shell]# cat con.sh #!/bin/bashfor i in `seq 1 5`do echo $i if [ $i -eq 3 ] then continue fi echo $idoneecho bbbbb[root@localhost_02 shell]# sh con.sh 112234455bbbbb
exit:退出整个脚本,用来确定脚本运行到什么位置时结束:
注释:如下图例表示直接退出整个脚本了:
[root@localhost_02 shell]# cat exit.sh #!/bin/bashfor i in `seq 1 5`do echo $i if [ $i -eq 3 ] then exit fi echo $idoneecho $ccccc[root@localhost_02 shell]# sh exit.sh 11223