• 『忘了再学』Shell流程控制 — 35、多分支case条件语句


    1、case条件语句介绍

    case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

    case语句语法如下:

    shell
    case $变量名 in
        "值1")
            如果变量的值等于值1,则执行程序1
            ;;
        "值2")
            如果变量的值等于值2,则执行程序2
            ;;
    
        …省略其他分支…
    
        *)
            如果变量的值都不是以上的值,则执行此程序
            ;;
    esac  (注:case的反写)

    说明:

    case语句和if…elif…else语句的区别:

    case语句中只能判断一个条件(值),是否符合某一个情况(值),是一种判断。

    if…elif…else语句,根据上一篇中的示例,我们可以看到if多分支条件语句,可以判断一个输入是否为空,是否是文件,是否是目录等多种条件关系,是不同的判断。

    2、case语句需要注意的内容

    • case语句,会取出变量中的值,然后与语句体中的值逐一比较。
      如果数值符合,则执行对应的程序,如果数值不符,则依次比较下一个值。
      如果所有的值都不符合,则执行*)下的程序,*)代表所有其他值。
    • case语句以“case”开头,以“esac”结尾。
    • 每一个分支程序之后要通过;;双分号结尾,代表该程序段结束。

    3、练习

    示例1

    shell
    #!/bin/bash
    
    # 请输入你需去往的城市
    echo "want to beijing,please input 1."
    echo "want to shanghai,please input 2."
    echo "want to chendu,please input 3."
    
    # 接收输入的信息,赋值给变量cho
    read -t 30 -p "please input your choice: " cho
    
    # case条件判断
    case $cho in
        "1")
        echo "to beijin"
            ;;
        "2")
            echo "to shanghai"
            ;;
        "3")
            echo "to chendu"
            ;;
        *)
            echo "error input"
            ;;
    esac

    示例2

    把上一篇文章if多分支条件语句的计算机练习中,第三层if嵌套改成case语句实现。

    shell
    #!/bin/bash
    # 字符界面加减乘除计算器。
    
    # 1.通过read命令接收要计算的数值,并赋予变量num1和num2
    read -t 30 -p "Please input num1: " num1
    read -t 30 -p "Please input num2: " num2
    
    # 2.通过read命令接收要计算的符号,并赋予变量ope.
    read -t 30 -p "Please input a operator: " ope
    
    # 第一层判断
    # 用来判断num1、num2和ope中都有值。
    # -n选项:判断后边的字符串是否为空,非空为真。
    # -a选项:逻辑与。
    if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
        then
            # 判断输入的num1和num2内容是否是纯数字 
            # 判断一个变量的内容是否是纯数字有很多方法,下面一种是简单好理解的。
            # 定义变量test1和test2的值为$(命令)的结果。
            test1=$(echo $num1 | sed 's/[0-9]//g')
            test2=$(echo $num2 | sed 's/[0-9]//g')
    
            # 说明:
            # 就是通过sed命令,把变量num1值中的每一个字符,只要是0-9的内容,就替换为空。
            # 最后如果test1的值最后为空,证明num1变量中的内容全部为数字,因为全部被替换了。
            # 如果test1的值最后不为空,证明num1变量中的内容有非数字,即num1非纯数字。
    
            # 第二层判断,用来判断num1和num2为数值。
            # 如果变量test1和test2的值为空,则证明numl和num2是数字.
            # -z选项:判断字符串是否为空(为空返回真)
            # -a选项:逻辑与。
            if [ -z "$test1" -a -z "$test2" ]
                then
                    # 如果test1和test2是数字,则执行以下命令。
    
                    # 第三层判断用来确认运算符。
                    # 确认变量$ope中是什么运算符。
                    case $ope in
                        "+")
                            # 如果是加号则执行加法运算。
                            value=$(($num1+$num2))
                            ;;
                        "-")
                            # 如果是减号,则执行减法运算。
                            value=$(($num1-$num2))
                            ;;
                        "*")
                            # 如果是乘号,则执行乘法运算。
                            value=$(($num1*$num2))
                            ;;
                        "/")
                            # 如果是除号,则执行除法运算。
                            value=$(($num1/$num2))
                            ;;
    
                        *)
                            # 如果运算符不匹配,提示输入有效的符号
                            echo "Please enter a valid symbol."
                            # 并退出程序,返回错误代码10。
                            exit 10
                            ;;
                    esac
            else
                # 如果test1和test2不为空,说明numl和num2不是数字。
                # 则提示输入有效的数值。
                echo "Please enter a valid value."
                # 并退出程序,返回错误代码11。
                exit 11
            fi
    
    else
        echo "qing input neirong."
        exit 12
    fi
    
    # 输出数值运算的结果。
    echo "$num1 $ope $num2 :$value"
    

    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16396044.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Pytorch ddp切换forward函数 验证ddp是否生效
    Redis与数据库的爱恨纠葛
    FFmpeg和SDL实现视频播放器之 ⌈音视频同步⌋
    【吃透MMDetction】MMDetection中的multi_apply的理解
    Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)
    NLP之RNN的原理讲解(python示例)
    SA实战 ·《SpringCloud Alibaba实战》专栏开篇
    强化学习学习笔记
    哪种灯对眼睛视力保护最好?盘点五款全光谱光照的护眼台灯
    Kubernetes kustomize 技术从入门到企业实战(下)
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16396044.html