07@流程控制之while循环

1|0流程控制之while循环

1|1一 、语法

1# while语句结构:条件为真时,执行循环体代码 while 条件 do 循环体 done 2# until语法结构:条件为假时,一直执行循环体代码,直到条件变为真 until 条件 do 循环体 done

简单示例

[root@aliyun test]# cat a.sh #!/bin/bash x=0 while (($x < 3)) do echo $x let x++ done echo "================" y=0 until (($y == 3)) do echo $y let y++ done [root@aliyun test]# ./a.sh 0 1 2 ================ 0 1 2 [root@aliyun test]#

1|2二、 continue与break

continue:默认退出本次循环 break:默认退出本层循环

示例

[root@aliyun test]# cat a.sh #!/bin/bash x=0 while (($x < 10)) do if (($x == 2));then let x++ continue fi if (($x == 7));then break fi echo $x let x++ done echo "================" y=0 until (($y == 10)) do if (($y == 2));then let y++ continue fi if (($y == 7));then break fi echo $y let y++ done [root@aliyun test]# ./a.sh 0 1 3 4 5 6 ================ 0 1 3 4 5 6 [root@aliyun test]#

1|3三、 案例

1|01、案例1:web监控状态

监控web页面状态信息, 失败3次, 表示网站出现问题需要进行报警

[root@aliyun test]# cat f.sh #!/bin/bash timeout=3 fails=0 success=0 url=$1 while true do echo "=====>$fails" if [ $fails -eq 3 ] then echo "fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败" break fi wget --timeout=$timeout --tries=1 http://$url -q if [ $? -ne 0 ] then let fails++ else echo "页面访问成功" break fi done [root@aliyun test]# ./f.sh www.egon.com.cn =====>0 =====>1 =====>2 =====>3 fails值等于3代表要进行第4次尝试,证明页面前访问3次均失败 [root@aliyun test]#

1|02、案例:(猜数字)

# 补充知识 方法一: 通过random变量产生随机数 (0-32768) echo $RANDOM 方法二: 通过openssl命令产生随机数 openssl rand -base64 10 方法三: 通过时间信息获取随机数 date +%S%N 方法四: 通过一个特殊设备文件生成随机数 head -c9 /dev/urandom|cksum tr -dc 0-9 < /dev/urandom | head -c8 方法五: 利用UUID文件生成随机数 cat /proc/sys/kernel/random/uuid # 代码实现 [root@egon shell]# cat guess_age.sh #!/bin/bash num=`echo $((RANDOM%100+1))` count=0 while : do [ $count -eq 3 ] && echo "猜的次数超过3次,退出" && exit read -p "请输入[1-100]之间的一个数字:" x [[ ! $x =~ ^[0-9]+$ ]] && echo "必须输入数字" && continue if [ $x -gt $num ];then echo "猜大了" elif [ $x -lt $num ];then echo "猜小了" else echo "猜对了" break fi let count++ done

1|03、案例:while循环

[root@egon ~]# cat login.sh #!/bin/bash while : # 冒号代表永远为真,无限循环 do read -p 'please input your name: ' name read -p 'please input your password: ' pwd if [ $name = 'egon' ] && [ $pwd = '123' ] then echo 'login sucessful' break # continue fi done

1|04、案例:until

[root@egon /]# cat 4.sh #!/bin/bash i=0 until [ $i -gt 4 ] do if [ $i == 2 -o $i == 3 ];then let i++ continue fi echo $i let i++ done [root@egon /]# . 4.sh 0 1 4

1|05、案例:while循环

[root@egon /]# cat 1.sh #!/bin/bash i=1 while ((i<10)) do echo $i ((i++)) done [root@egon /]# . 1.sh 1 2 3 4 5 6 7 8 9

1|06、案例:while循环

[root@egon /]# cat 2.sh #!/bin/bash var1="AAA" var2="BBB" var3="CCC" while : do clear echo -e "1:${var1}\n2:${var2}\n3:${var3}" temp=$var1 var1=$var2 var2=$var3 var3=$temp sleep 1 done

1|07、案例:while和read实现逐行处理

[root@egon /]# cat 3.sh #!/bin/bash i=0 while read line do echo $i:$line let i++ done</etc/passwd

1|08、案例:用while循环+case来制作一个简单的菜单功能

#!/bin/bash echo "script name: `basename $0`" echo "version 1.0" echo `date +%F_%H:%M:%S` echo "Author: egon" while read -p "(h for help): " var do case $var in p|P|cpu|CPU) echo -e "\n\n" grep 'model name\|cpu MHz\|processor' /proc/cpuinfo |sort |uniq echo -e "\n\n" ;; m|m|mem|MEM) echo -e "\n\n" free echo -e "\n\n" ;; d|D|disk|DISK) echo -e "\n\n" df -Th echo -e "\n\n" ;; h|H|help|HELP) echo -e "\n\tcommand\taction\n\n" for i in cpu mem disk do echo -e "\t$i\t${i}_info" done echo -e "\thelp\tthis help page.." echo -e "\tquit\texit !!.." echo -e "\n\n" ;; q|Q|quit|exit) exit ;; *) echo -e "\n$var Enter Error...\n" esac done

1|09、案列:while编写99乘法表编写(带框)

#方式一: [root@web01 opt]# cat hzl.sh #!/bin/bash # 九九乘法表 x=1 STA1="---------" STR2="|" while (( x <= 9 )) do str="" y=1 z=$x while (( $z > 0 )) do echo -n $STA1 let z-- done echo "" while (( $y <= $x )) do str=$str"$STR2 $y*$x=`echo $(($x*$y))` " let y++ done echo $str" "$STR2 let x++ done while (( $x > 1 )) do echo -n $STR1 let x-- done echo "" [root@web01 opt]# #执行状态查看 [root@web01 opt]# ./hzl.sh --------- | 1*1=1 | ------------------ | 1*2=2 | 2*2=4 | -------------------------- | 1*3=3 | 2*3=6 | 3*3=9 | ------------------------------------ | 1*4=4 | 2*4=8 | 3*4=12 | 4*4=16 | --------------------------------------------- | 1*5=5 | 2*5=10 | 3*5=15 | 4*5=20 | 5*5=25 | ------------------------------------------------------ | 1*6=6 | 2*6=12 | 3*6=18 | 4*6=24 | 5*6=30 | 6*6=36 | --------------------------------------------------------------- | 1*7=7 | 2*7=14 | 3*7=21 | 4*7=28 | 5*7=35 | 6*7=42 | 7*7=49 | ------------------------------------------------------------------------ | 1*8=8 | 2*8=16 | 3*8=24 | 4*8=32 | 5*8=40 | 6*8=48 | 7*8=56 | 8*8=64 | --------------------------------------------------------------------------------- | 1*9=9 | 2*9=18 | 3*9=27 | 4*9=36 | 5*9=45 | 6*9=54 | 7*9=63 | 8*9=72 | 9*9=81 | #方式二: a=1 x=" --------" y="|" while (( $a<=9 ));do z=$a while (( $z>0 ));do echo -n "$x" let z-- done echo "" b=1 while (( $b<=$a ));do echo -n "$y $b*$a=$(($a*$b)) " let b++ done echo "$y" let a++ done while (( $a > 1 ));do echo -n "$x" let a-- done echo "" [root@m01 ~]# sh hzl.sh -------- | 1*1=1 | -------- ------- | 1*2=2 | 2*2=4 | -------- -------- ------ | 1*3=3 | 2*3=6 | 3*3=9 | -------- -------- -------- ------- | 1*4=4 | 2*4=8 | 3*4=12 | 4*4=16 | -------- -------- -------- -------- -------- | 1*5=5 | 2*5=10 | 3*5=15 | 4*5=20 | 5*5=25 | -------- -------- -------- -------- -------- -------- | 1*6=6 | 2*6=12 | 3*6=18 | 4*6=24 | 5*6=30 | 6*6=36 | -------- -------- -------- -------- -------- -------- -------- | 1*7=7 | 2*7=14 | 3*7=21 | 4*7=28 | 5*7=35 | 6*7=42 | 7*7=49 | -------- -------- -------- -------- -------- -------- -------- -------- | 1*8=8 | 2*8=16 | 3*8=24 | 4*8=32 | 5*8=40 | 6*8=48 | 7*8=56 | 8*8=64 | -------- -------- -------- -------- -------- -------- -------- -------- -------- | 1*9=9 | 2*9=18 | 3*9=27 | 4*9=36 | 5*9=45 | 6*9=54 | 7*9=63 | 8*9=72 | 9*9=81 | -------- -------- -------- -------- -------- -------- -------- -------- --------

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121523.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(103)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示