美文网首页Shell
Shell Script(六):条件分支语句 2

Shell Script(六):条件分支语句 2

作者: 蓝天白云bubble | 来源:发表于2019-01-12 12:08 被阅读57次

    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

           这篇文章讲述一下 case 条件分支语句。在多分支条件判定的场景中,可以使用 if 条件分支语句来编写脚本,但可能看上去不那么优雅,这时候可以考虑使用 case 条件分支语句。
           为方便讲述,先虚构这么一个场景:程序在和用户交互时,程序要根据用户的输入在终端进行相应的输出。
           当用户输入是 1 时,程序在终端输出 1 ;
           当用户输入是 2 时,程序在终端输出 2 ;
           当用户输入是 3 时,程序在终端输出 3 ;
           当用户的输入不是 1 不是 2 也不是 3 时,程序在终端输出 You did not enter a number between 1 and 3.
            如果使用 if 条件分支语句,脚本如下:

    #!/bin/bash
    
    echo -n "Enter a number between 1 and 3 inclusive > "
    read character
    if [ "$character" = "1" ]; then
        echo "You entered one."
    elif [ "$character" = "2" ]; then
        echo "You entered two."
    elif [ "$character" = "3" ]; then
        echo "You entered three."
    else
        echo "You did not enter a number between 1 and 3."
    fi
    

            上面的这种写法完全可以实现我们需要的功能,但看上去 if... elif... else... 的使用次数较多,代码显得臃肿,这时候如果我们选择使用 case 条件分支语句,脚本如下:

    #!/bin/bash
    
    echo -n "Enter a number between 1 and 3 inclusive > "
    read character
    case $character in
        1 ) echo "You entered one."
            ;;
        2 ) echo "You entered two."
            ;;
        3 ) echo "You entered three."
            ;;
        * ) echo "You did not enter a number between 1 and 3."
    esac
    

            这段脚本实现了和第一个脚本同样的功能,但看上去清爽了很多。这就是 case 条件分支语句的作用。
            接下来简单介绍一下 case 条件分支语句的使用方法:

    case word in
        pattern1 ) command1 ;;
        pattern2 ) command2 ;;
        ...
        patternn ) commandn ;;
    esac
    

            脚本在执行时会将 word 的形式与下面第 1 个到第 n 个 pattern 的模式进行匹配,如果匹配成功则执行相应 pattern 后面的命令,并且不再尝试与后续的 pattern 进行模式匹配。比如 word 的模式与第 2 个 pattern 的模式相匹配,那么程序将执行第二个 pattern 后面的命令,这时即便 word 和第 2 个 pattern 后面的某个 pattern 相匹配,程序也不会做任何动作了。
            这里有两点需要注意:
           1、patterns 是 Shell 中的正则表达式,与 java 或 python 中的正则表达式是有区别的。要想知道更多关于 Shell 正则表达式的知识,可以自己搜索相关的教程;
           2、注意两个分号的使用,如果只用一个分号会报错。

           在知道了 case 条件分支语句的使用方法后,再来展示一个稍稍复杂点的例子:
           (1)当用户输入的是单个字母时,程序在终端输出 You typed the letter
           (2)当用户输入的是单个数字时,程序在终端输出 You typed the digit
           (3)当用户输入其他内容时,程序在终端输出 You did not type a letter or a digit
           实现该功能的脚本如下:

    #!/bin/bash
    
    echo -n "Type a digit or a letter > "
    read character
    case $character in
                                    # Check for letters
        [[:lower:]] | [[:upper:]] ) echo "You typed the letter"
                                    ;;
    
                                    # Check for digits
        [0-9] )                     echo "You typed the digit"
                                    ;;
    
                                    # Check for anything else
        * )                         echo "You did not type a letter or a digit"
    esac
    

           这段脚本也很简单,如果读者在看这段代码时感觉有困难,可能是看不太明白正则表达式部分。不过没有关系,因为你只需要知道这里是在讲述 case 条件分支语句的使用方法,只要知道了这些这里就达到了知识分享的目的。如果真的很想弄明白 Shell 中的正则表达式,还是那句话,可以自己搜索相关教程来学习。

    相关文档

    http://linuxcommand.org/lc3_wss0110.php

    上一篇:Shell Script(五):交互和算数运算
    下一篇:Shell Script(七):循环(for, while, until)

    相关文章

      网友评论

        本文标题:Shell Script(六):条件分支语句 2

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