流程控制之while循环

一 语法

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

# 二、until语法结构:条件为假时,一直执行循环体代码,直到条件变为真
until 条件
do
	循环体
done
简单示例—>while循环
#!/bin/bash
count=0
while [ $count -lt 8 ]
do
echo $count
let count++
done

示例–>until循环
#!/bin/bash
count=0
until [ $count -gt 7 ] 
do
echo $count
let count++
done

死循环
while True:

    1 + 1
~          

用top动态查看CPU的状态,以及用户态,1分钟,5分钟,15分钟的负载均衡

二、打断循环

2.1 条件为假----- >后面有命令还会执行,只能等到下一次循环才能判别真假
2.2break打断----- >直接进行强制打断(终止本层循环)
2.3continue–>终止本次循环
示例— >break
#!/bin/bash

tag=true
while $tag
do
tag=true
while $tag
do
echo 1
echo 2
echo 3
#tag=false
break
echo "============"
done

示例–>打印数字1-7,但是跳过3,用continue打断
#!/bin/bash
count=0
while [ $count -lt 8 ]
do
    if [ $count -eq 3 ];then
       let count++
       continue
    fi
    echo $count
    let count++
done

示例–>输入用户密码不超过3次,超过退出,输入正确退出。
#!/bin/bash
count=0
while true
do
read -p "username: " inp_name
read -p "password: " inp_pwd
if [ "$inp_name" = "yuan" ] && [ "$inp_pwd" = "123" ];then
    echo "login successful"
    break
else
    echo "username or password error"
    let count++
fi
    if [ $count -eq 3 ];then
         echo "tries too many times"
        break
    fi
done

示例:while和read实现逐行处理
#!/bin/bash
count=0
while true
do
read -p "username: " inp_name
read -p "password: " inp_pwd
if [ "$inp_name" = "yuan" ] && [ "$inp_pwd" = "123" ];then
    echo "login successful"
    while true
    do
    echo "0 退出"
    echo "1 提款"
    echo "2 转账"
    echo "3 查询"
    read -p "请输入操作编号:" choice
    case $choice in
    "0")
        #exit
        break

     ;;
    "1")
        echo "正在提款"
     ;;
    "2")
        echo "正在转账"
     ;;
     "3")
         echo "正在查询"
     ;;
     esac
    done
    break
else
    echo "username or password error"
    let count++    ####给一次机会
fi
    if [ $count -eq 3 ];then
         echo "tries too many times"
        break
    fi
done

监控百度页面状态信息
#!/bin/bash
[ $# -eq 1 ] && echo "usage :$0 arg1" && exit
count=0
while true
do
curl https://www.baidu.com  &>/dev/null
if [ $? -eq 0 ];then
    echo "https://www.baidu.com is ok"
    break
else
   let count++
    
fi
    
   if [ $count -eq 3 ];then
   echo "https://www.baidu.com is down"
   break
   fi
done

监控web页面状态信息, 失败3次, 表示网站出现问题需要进行报警
#!/bin/bash
[ $# -ne 1 ] && echo "usage :$0 arg1" && exit    ####加一个参数限制
count=0
while true
do
    curl $1 &>/dev/null
    if [ $? -eq 0 ];then
        echo "$1 is ok"
        break
    else
        let count++

    fi

    if [ $count -eq 3 ];then
       echo "$1 is down"
       break
    fi
done


#####执行脚本加参数
 chmod +x check_url.sh
 ./check_url.sh htttps://www.baidu.com
while循环
#!/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
while和read实现逐行处理
#!/bin/bash

while read line
do

    echo "====$line===="
done</etc/passwd

用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       ##while true
do                                        #do
    case $var in                          #read -p "(h for help): " var
        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
猜数字
# 补充知识
    	方法一: 通过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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值