1、循环语句:

循环语句命令常用于重复执行一条命令或者一组命令,直到不结果不在满足循序条件时停止。

2、常见循环语句:

while、until、for以及select

3、while循环语句的语法

			while <条件表达式>
				do
						命令
			done

说明;while后面紧跟条件表达式,如果表达式满足,则执行do后面的命令,当执行到done时,会在重复判断条件表达式,是否满足,如果满足继续执行do后面的命令,直到不再满足条件表达式

3、until循环语句的语法

		until <条件表达式>
			do
					命令
		done

说明:until用法与while用法类似,唯一的区别是,until循环是在条件表达式不成立的时候,进入do循环,如果成立则终止循环。

4、while循环基本实例

1、每个2秒钟,输出一次系统负载情况

		while true	#true表示永远为真,在这里无论循环多少次,条件表达式一直成立
				do	
					uptime	 	#显示系统负载
					sleep 2		#每2秒循序一次循环体
			done
	```

2、通过while循环输出987654321 #!/bin/bash a=9 while ((a>0)) do echo "$a" ((a--)) done 同样可以用until实现 #!/bin/bash a=9 until ((a<1)) do echo "$a" ((a--)) done 用until时,就是当变量a的值小于1成立时,终止循环

5、手机充值,每发送一条短信减掉1角5分钱,如果低于1角5分,提示余额不足,请充值

		#!/bin/bash
			sen_num=15	              #定义余额变量,初始值15
			fre_num=15                 	#定义每条短信使用金额为15
			total=0		                     #定义发送次数变量,初始值为0次
			. /etc/init.d/functions		                   #调用系统函数库
			function change () {			              #定菜单选择函数
			echo '

			===================================
			1.充值
			2.发送短信
			3.查询余额
			4.退出

			===================================
			'
			}
			function  chong () {		                   #定义充值函数
				read -p "请输入充值金额:" pice	          	#read读取用户输入的金额
				expr $pice + 1 &>/dev/null		                 #判断用户输入的金额是否为整数
				if [ $? -ne 0 ] ;then
					echo "请输入正确的数值!"
				else 	
					 sen_num=$((sen_num+pice))	             	#余额增加
					 echo "当前可用余额:$sen_num"
				fi
			}
			function jixu () {				                #定义询问用户是否继续发送短信函数
								read -p "请问是否继续发送短信(yes|no):" A
							 case $A in
											Y|yes)
											send
											;;
											N|no)
											main
											;;
											*)
											echo "Input yes or no"
				esac
			}
			function send () {			                      #定义发送短信函数
				if [ $sen_num -le $fre_num  ] ; then		            #判断余额是否充足
				 printf "当前可用余额不足,请及时充值。\n"
				else
				while true
				do
				read -p "请输入短信内容:" content		         #read读取用户输入的短信内容
				sen_num=$((sen_num-fre_num))
				printf  "SMS sent successfully!!!\n"
				((total=total+1))		               #每发送成功一次,发送次数加1
				last=$((sennum/frenum))        	#计算余额可发送多少条短信
				printf "您已发送$total条短信!剩余$last!\n"	
				jixu		#调用是否继续函数
				if [ $sen_num -lt $fre_num ] ; then	      #判断可用余额情况
					echo "余额不足,请充值!"
					return 1
				fi
					done
			fi
			}
			function main () {	                     	#定义主函数
				while  true	
				do
				change		                                  #调用菜单函数
				read -p  "请选择你要操作的数字:" men           #read读取用户选择的菜单数字
				case $men in		                                  #判断数字,对应调用函数
				1)
				 chong
				;;
				2)
				send
				jixu
				;;
				3)
				printf "当前可用余额$sen_num"
				;;
				4)
				exit 0
				;;
				*)
				printf "输入错误,请输入{1|2|3|4}\n"
				esac
			done
			}
			main	                        #调用主函数运行
### 6、while循环每个10秒确定网站是否正常
			#!/bin/bash
			. /etc/init.d/functions		          #调用系统函数库
			total1=0	#定义次数变量
			 total () {		#设置次数函数
							((total1++))
							if [ "$total1" -ge 2 ] ;then	              #判断执行次数是否大于等2次
							exit 0
							fi
			}

			if  [ $# -ne  1 ];then			                 #判断参数个数是否正确
				printf  "usage:$0 web_url \n"
				exit 1
			fi

			while  true
				 do
				wget --spider --timeout 5 --tries=2 -qr $1            #通过wget命令判断网站
				if  [  $?  -eq   0  ];then	                            #返回状态值是否为0
				action "$1 is ok"  /bin/true	                  #如果是,则表示网站正确
				#exit 1
				else 
				action "$1 is no"  /bin/false		                #否则失败
				fi
				sleep 3 	#每个3秒循环一次
				total                 #调用次数函数,判断循环次数,如果超过2次,则退出脚本
			done
### 7、while循环按行读取文件的方式:
1、通过exec读取
		
			exec <file
						while read line
							do
								命令
						done
2、通过cat命令加管道读取文件

				cat file|while read line ;do
														命令
											done

3、通过while结尾done输入重定向读取文件

			while read line
						do
								命令
					done <file

实例:读取Nginx或者Apache日志文件,每行的访问字节数对应的数字,并计算出总和
			#!/bin/bash
			sum=0		                    	#定义字节数总和变量,初始值0
			exec <$1		                  #通过exec命令读取文件
			while read line;do           	#while循序读行
				size=`echo $line|awk '{print $10}'`              #通过awk命令截取访问字节数列
				expr $size + 1 &>/dev/null	                   #判断截取的是否为整数
				if [ $? -ne 0 ];then		   #如果不为整数,continue命令则跳过非整数的部分,继续整数的加法计算
				continue
				fi
				((sum=sum+$size))
			done
			echo "$sum"