Shell

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

2019-01-12  本文已影响57人  蓝天白云bubble

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

       这篇文章讲述一下 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)

上一篇下一篇

猜你喜欢

热点阅读