首页 > 其他分享 >07@流程控制之while循环

07@流程控制之while循环

时间:2022-10-09 22:32:10浏览次数:52  
标签:-------- 07 流程 echo while sh let root


文章目录

流程控制之while循环

一 、语法

1)# while语句结构:条件为真时,执行循环体代码
while 条件
do
循环体
done

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

简单示例

[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]#

二、 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、案例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]#

2、案例:(猜数字)

# 补充知识
方法一: 通过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++

3、案例: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

4、案例: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

5、案例: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

6、案例: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

7、案例:while和read实现逐行处理

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

8、案例:用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"

9、案列: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 |


标签:--------,07,流程,echo,while,sh,let,root
From: https://blog.51cto.com/u_15166421/5741862

相关文章

  • 流程结构及基本数据类型常见内置方法
    本周内容总结概要垃圾回收机制if分支结构while循环for循环整型内置方法浮点型内置方法字符串常用操作列表常用操作字典常用操作集合常用操作元组常用操作字......
  • 文件操作的基本流程
    文件操作的基本流程基本流程#1.打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件,对应一块硬盘空间,并返回一个文件对象赋值给一个变量ff=open('a......
  • P1407 [国家集训队]稳定婚姻
    P1407对于数据读入的处理就是用map将字符串映射为一个数值即可。我们称n对为夫妇,m对为情人,如果把这n+m对关系都用边相连,我们可以得到很多个环,在环中如果一对夫妇离婚,那......
  • Go 异常处理流程
    前言有这样一段代码:funcmain(){ //捕捉异常 deferfunc(){ iferr:=recover();err!=nil{ fmt.Println(err) } }() gofunc(){ fmt.Println("st......
  • 3d线上虚拟展馆的优势及制作流程-深圳华锐视点
    虚拟3D展馆是互联网时代最新的一种传播推广方式,协助企业完成数字化转型,打好“线上营销”这一仗就能收获更多的商机,成为线上展重点获客的选择。深圳华锐视点结合多......
  • 日语之软件开发流程 及专业词汇
    ## 软件开发的流程 注意词汇 ## 软件专业的词汇   、  ## 单词    ......
  • springMVC的工作流程
    一.springMVC的常用组件1)DispatcherServlet是一种前端控制器,由框架提供。作用:统一处理请求和响应。除此之外还是整个流程控制的中心,由DispatcherServlet来调用其他组......
  • while循环语句
    注意事项条件需提供布尔类型结果,True继续,False停止空格缩进不能忘请规划好循环终止条件,否则将无限循环案例1i=0whilei<100:print("小美,我喜欢你")......
  • ClickHouse(07)ClickHouse数据库引擎解析
    目录Atomic建表语句特性TableUUIDRENAMETABLESDROP/DETACHTABLESEXCHANGETABLESReplicatedMergeTreeinAtomicDatabaseMySQL创建数据库mysql与ClickHouse数据类型对......
  • 一、注册流程梳理及代码封装-14
    #编码#coding=utf-8#浏览器驱动包fromseleniumimportwebdriver#时间包importtime#引入随机数生成包importrandom#使用pip库进行图片解析包/取图片......