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

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

        先看下基本用法:

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

看个具体实例:

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

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

 

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘阿童木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值