美文网首页
流程控制_while循环

流程控制_while循环

作者: 慕知 | 来源:发表于2020-12-28 11:31 被阅读0次

一,语法

1, while
while语法: 条件为真,则运行循环体代码,直到条件变成假的则结束循环;又叫条件循环

while 条件
do
    代码1
    代码2
done



案例
[root@\ m01~]# vim /script/while.sh
#!/bin/bash
count=0
while [ $count -lt 8 ]
do
    echo $count
    let count++
done

[root@\ web01~]# chmod +x /script/while.sh
[root@\ m01~]# /script/while.sh
0
1
2
3
4
5
6
7




2, until
until语法(了解即可):条件为假,才运行循环代码,直到条件为真则结束循环
while 条件
do
    代码1
    代码2
done




案例:
[root@\ m01~]# vim /script/until.sh
#!/bin/bash
count=0
until [ $count -gt 7 ]
do
    echo $count
    let count++
done


[root@\ m01~]# /script/until.sh
0
1
2
3
4
5
6
7
3,死循环
[root@\ m01~]# while :;do echo 1;echo 2;echo 3;echo 4;done


## 这里的冒号代表永远为真;等同于
[root@\ m01~]# vim /script/test.sh
#!/bin/bash
while [ 1 -eq 1 ]
do
    echo 1
done



另一种python死循环
[root@\ m01~]# vim /script/test.py
while True:
    1 + 1

# 放在后台执行
[root@\ m01~]# python /script/test.py &
[1] 42643


查看top的平均负载及cpu变化
[root@\ m01~]# top
top - 12:35:49 up 1 day, 16:51,  3 users,  load average: 1.74, 1.25, 1.12
Tasks: 111 total,   2 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s): 99.7 us,  0.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995896 total,   343492 free,   140348 used,   512056 buff/cache
KiB Swap:  1048572 total,  1047028 free,     1544 used.   605168 avail Mem
... ...



 load average: 1.74, 1.25, 1.12代表最近一分钟 五分钟 十分钟的平均负载
以及观察%Cpu(s): 99.7 us值



=============结束死循环的两种方式
1.条件为假
[root@\ web01/script]# vim while2.sh#!/bin/bash
tag=true
while $tag
do
    echo 1
    echo 2
    echo 3
    tag=false
done


验证
[root@\ web01/script]# chmod +x /script/while2.sh
[root@\ web01/script]# ./while2.sh
1
2
3






2.break



#1)第一种方式
[root@\ web01/script]# vim while2.sh
#!/bin/bash
tag=true
while $tag
do
    echo 1
    echo 2
    echo 3
    break
done


#2)第二种方式
[root@\ web01/script]# vim while.sh
#!/bin/bash
count=0
while [ $count -lt 8 ]
    if [ $count -lt 4 ];then
        break
    fi
do
    echo $count
    let count++
done



验证:
[root@\ web01/script]# ./while2.sh
1
2
3




以上两种区别
[root@\ web01/script]# vim while2.sh
#!/bin/bash
tag=true
while $tag
do
    echo 1
    echo 2
    echo 3
    tag=false
    echo 99999999
    echo 666
done


[root@\ web01/script]# ./while2.sh
1
2
3
99999999
666




2)
[root@\ web01/script]# vim while2.sh
#!/bin/bash
tag=true
while $tag
do
    echo 1
    echo 2
    echo 3
    break
    echo 99999999
    echo 666
done


[root@\ web01/script]# ./while2.sh
1
2
3


总结:
第一种的,会判断条件为假时,才会停止;
第二种会即可停止







3. continue   # 案例- 跳过3

[root@\ web01/script]# vim while.3.sh
#!/bin/bash
count=0
while [ $count -lt 6 ]
do
    if [ $count -eq 3 ];
        let count++
        continue
    fi
    echo $count
    let count++
done



[root@\ web01/script]# ./while.3.sh
0
1
2
4
5

二,实战案例

1,用户登陆
[root@m01~]# vim /script/login.sh
#!/bin/bash
while true
do
    db_name=zx
    db_pwd=123
    read -p "请输入用户名:" inp_name
    read -p "请输入用户名密码:" inp_pwd
    if [ $inp_name = $db_name ] && [ $inp_pwd = $db_pwd ];then
        echo "登陆成功"
        break
    else
        echo "登陆失败"
    fi
done


[root@m01~]# /script/login.sh
请输入用户名:wq
请输入用户名密码:wq
登陆失败
请输入用户名:wq
请输入用户名密码:wq
登陆失败
请输入用户名:zx
请输入用户名密码:123
登陆成功







注意:以上脚本输入正确会退出,
     输入错误会无限循环继续登陆,会导致用户试出密码,不安全
     限制输入三次错误密码,即退出



优化脚本:
[root@m01~]# vim /script/login.sh
#!/bin/bash
while true
do
    db_name=zx
    db_pwd=123
    read -p "请输入用户名:" inp_name
    read -p "请输入用户名密码:" inp_pwd
    if [ $inp_name = $db_name ] && [ $inp_pwd = $db_pwd ];then
        echo "登陆成功"
        break
    else
        echo "登陆失败"
        let count++
    fi
    if [ $count -eq 3 ];then
        echo "已错误输入3次"
        break
    fi
done


[root@m01~]# /script/login.sh
请输入用户名:qw
请输入用户名密码:qw
登陆失败
请输入用户名:we
请输入用户名密码:we
登陆失败
请输入用户名:er
请输入用户名密码:rt
登陆失败
已错误输入3次








完整版:

#!/bin/bash
while true
do
    db_name=zx
    db_pwd=123
    read -p "请输入用户名:" inp_name
    read -p "请输入用户名密码:" inp_pwd
    if [ $inp_name = $db_name ] && [ $inp_pwd = $db_pwd ];then
        echo "登陆成功"
        while true
        do
          echo "0 退出"
          echo "1 取款"
          echo "2 转账"
          echo "3 查询余额"
          read -p "请输入编码:" code
          case $code in
              "0")
                  break
                  ;;
              "1")
                  echo "正在取款..."
                  ;;
              "2")
                  echo "正在转账..."
                  ;;
              "3")
                  echo "正在查询余额"
                  ;;
              *)
                  echo "请选择正确的编码"
          esac
        done
        break
    else
        echo "登陆失败"
        let count++
    fi
    if [ $count -eq 3 ];then
        echo "已错误输入3次"
        break
    fi
done





[root@m01~]# /script/login.sh
请输入用户名:zx
请输入用户名密码:123
登陆成功
0 退出
1 取款
2 转账
3 查询余额
请输入编码:03
请选择正确的编码
0 退出
1 取款
2 转账
3 查询余额
请输入编码:0

2,while循环读取文件,设置文件格式
[root@m01~]# vim /script/while3.sh
#!/bin/bash
while read line
do
    echo "...$line..."
done</etc/passwd



[root@m01~]# chmod +x /script/while3.sh
[root@m01~]# /script/while3.sh
...root:x:0:0:root:/root:/bin/bash...
...bin:x:1:1:bin:/bin:/sbin/nologin...
...daemon:x:2:2:daemon:/sbin:/sbin/nologin...
... ...

相关文章

  • shell流程控制-while循环语句

    shell流程控制-while循环语句 while循环介绍 while循环语法 while实战 一、while循环...

  • 学习笔记3-基本流程控制

    基本流程控制 while循环 if else语句 do…while循环 for循环 switch语句 for......

  • javascript

    流程控制 switch 循环 for 循环和 while 循环的区别:for 用于知道循环次数的循环,while ...

  • 控制流程

    控制流程 本节包含内容: For循环 While循环 条件语句 控制转移语句 For循环 for循环用来按照指定的...

  • iOS - for与while与do-while

    1. while循环 while是循环流程控制。使用的标准格式为 说明: ① while循环的表达式是循环进行的条...

  • 零基础Java学习第四篇

    流程控制 条件语句 if条件语句 循环语句 while循环语句 for循环语句 循环语句嵌套

  • 2019-06-25 Java 程序基本结构

    流程控制语句:选择:if...else,switch...case循环:while,do...while,for转...

  • 第二周第三天

    第二周 第三天 流程控制 并行结构 while循环 repeat while 循环至少执行一次 for 循环fo...

  • Python精简入门级学习(三)

    Python精简入门学习之流程控制(上)-流程控制 -While循环:适用于对未知的循环次数 用于判断 -for使...

  • Python精简入门学习(三)

    Python精简入门学习之流程控制(上) -流程控制 -While循环:适用于对未知的循环次数 用于判断 -for...

网友评论

      本文标题:流程控制_while循环

      本文链接:https://www.haomeiwen.com/subject/bfconktx.html