• Linux与Shell学习--shell系列12--流程控制5(case ... esac循环)


            在shell中case...esac循环和if else ... elif...else用法类似,都是去和每个条件语句进行判断,直到碰到符合的判断条件就结束循环,在case...esac中,"需要满足的值"后面必须跟着单词 in,每个判断条件必须以右括号结束,;;可以理解成break,跳出循环。匹配发现取值符合判断条件后,开始执行其子代码模块直至碰到 ;;结束循环。如果所有判断条件都不符合,则走到 *的判断条件中,执行*的判断条件。

            先看下基本用法:

    1. case 需要满足的值 in #这里设置一个需要满足的条件
    2. 判断条件1) #判断条件1,判断该条件是否符合需要满足的值
    3. 子模块 #如果判断条件为 true,执行子模块1
    4. ;; #结束整个循环
    5. 判断条件2) #如果判断条件1没满足需要满足的值,则走到判断条件2,判断该条件是否符合需要满足的值
    6. 子模块2 #如果判断条件为 true,执行子模块2
    7. ;; #结束整个循环
    8. 判断条件3) #如果判断条件2没满足需要满足的值,则走到判断条件3,判断该条件是否符合需要满足的值
    9. 子模块3 #如果判断条件为 true,执行子模块3
    10. ;; #结束整个循环
    11. ……
    12. *) #如果之前的判断条件都没满足需要满足的值,则走到判断条件*
    13. 子模块4 #走到判断条件*后,不管有没有满足都会执行下面的子模块
    14. ;; #结束整个循环
    15. esac #结束语法

    看个具体实例:

    1. #!/bin/bash
    2. echo "输入一个1-3的值" #打印 输入一个1-3的值
    3. read num #读取输入的值num
    4. case $num in #给num设定值为输入的num
    5. 1) #判断 当输入的值为1时,走到1的子代码模块中
    6. echo "输入的值为1" #打印 输入的值为1
    7. ;; #结束整个循环
    8. 2) #判断 当输入的值为2时,走到2的子代码模块中
    9. echo "输入的值为2" #打印 输入的值为2
    10. ;; #结束整个循环
    11. 3) #判断 当输入的值为3时,走到3的子代码模块中
    12. echo "输入的值为3" #打印 输入的值为3
    13. ;; #结束整个循环
    14. *) #当上述所有判断条件都不满足时,走到*的代码模块中
    15. echo "输入的值是其他" #打印 输入的值是其他
    16. ;; #结束整个循环
    17. esac #结束的语法

    下面看下各项的输入结果:

     

    可以看出当输入1时因为满足条件的1判断条件所以就直接走到了条件1的子代码模块中,直接结束循环不走后面的流程了

    当输入为2时,因为不满足判断条件1,所以继续往下走到判断条件2,发现满足判断条件2,则走到条件2的子代码模块中,直接结束循环不走后面的流程了

    当输入为3时,因为不满足判断条件1,所以继续往下走到判断条件2,发现仍不满足判断条件2,所以继续往下走到判断条件3,发现满足判断条件3,则走到条件3的子代码模块中,直接结束循环不走后面的流程了

    当输入为5时,首先因为不满足判断条件1,所以继续往下走到判断条件2,发现仍不满足判断条件2,所以继续往下走到判断条件3,发现还不满足判断条件3,则走到*的子代码模块中,执行*的子代码模块,结束整个循环。

    稍微改下判断条件,使其满足多个判断条件,看看会不会走到多个条件分支去。

    1. #!/bin/bash
    2. echo "输入一个1-3的值" #打印 输入一个1-3的值
    3. read num #读取输入的值num
    4. case $num in #给num设定值为输入的num
    5. 1) #判断 当输入的值为1时,走到1的子代码模块中
    6. echo "输入的值为1" #打印 输入的值为1
    7. ;; #结束整个循环
    8. 2) #判断 当输入的值为2时,走到2的子代码模块中
    9. echo "输入的值为2" #打印 输入的值为2
    10. ;; #结束整个循环
    11. 2) #判断 当输入的值为3时,走到3的子代码模块中
    12. echo "第二个判断条件也是2" #打印 第二个判断条件也是2
    13. ;; #结束整个循环
    14. *) #当上述所有判断条件都不满足时,走到*的代码模块中
    15. echo "输入的值是其他" #打印 输入的值是其他
    16. ;; #结束整个循环
    17. esac #结束的语法

     看下输入2时,会走到那个分支里:

    这样来看是走到第1个2的时候就直接停止了循环,没有再去往下走去进行条件判断了。

            case...esca和python的if...esif...else一样,整体流程就是先找一个需要满足的值,然后由上到下去和下面的各个判断进行对比,如果满足了任意判断条件,则进入到对应的子代码模块中,如果都不满足,则走到最后的*条件句中,执行*的子代码模块,然后结束整个循环。如果满足了其中多个判断条件,则由上到下,走到第一个满足的条件时,去执行他的子代码模块,然后结束循环。

  • 相关阅读:
    ruoyi-nbcio-plus基于vue3的flowable收回任务后重新进行提交表单的处理
    mq学习方式
    使用go开发的小tips
    Deep Dual-resolution Network 原理与代码解析
    QT快速入门
    SpringBoot+Kafka
    IP6826无线充电底座方案IC芯片,兼容WPC Qi v1.2.4
    Failed to rollback to checkpoint/savepoint hdfs://mycluster:8020/ck/sapgateway
    保持数据库唯一的三种方式
    JavaScript基础知识14——运算符:逻辑运算符,运算符优先级
  • 原文地址:https://blog.csdn.net/weixin_42893232/article/details/127854445