欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell中的case语句

程序员文章站 2022-07-12 12:10:51
...

1.case语句

case多分支语句 case语句的结构:
针对变量的不同取值,分别执行不同的命令列

case  变量值  in
模式1)
    命令序列1
        ;;
模式2)
    命令序列2
    ;;
.....
*)
默认命令序列
esac

shell中的case语句

#!/bin/bash
printf "Input integer number: "
read num
case $num in
    1)
        echo "Monday"
        ;;
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac

运行结果:输入7
输出Sunday

注:

case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式。
expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。

case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配: 如果
expression 和某个模式(比如 pattern2)匹配成功,就会执行这模式(比如
pattern2)后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止;然后整个 case
语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。 如果 expression
没有匹配到任何一个模式,那么就执行)后面的语句(表示其它所有值),直到遇见双分号;;或者esac才结束。)相当于多个 if分支语句中最后的 else 部分。*

注:

对*)的几点说明:
Shell case in 语句中的*)用来“托底”,万一 expression
没有匹配到任何一个模式,)部分可以做一些“善后”工作,或者给用户一些提示。 可以没有)部分。
如果 expression没有匹配到任何一个模式,那么就不执行任何操作。 除最后一个分支外(这个分支可以是普通分支,也可以是*)分支),其它的每个分支都必须以;;结尾,;;代表一个分支的结束,不写的话会有语法错误。最后一个分支可以写;;,也可以不写,因为无论如何,执行到esac 都会结束整个 case in 语句
上面的代码是 case in 最常见的用法,即 expression
部分是一个变量,pattern 部分是一个数字或者表达式。

2.case in 和正则表达式

case in 的 pattern 部分支持简单的正则表达式,具体来说,可以使用以下几种格式:
shell中的case语句
:如果不加以说明,Shell 的值都是字符串expression 和 pattern 也是按照字符串的方式来匹配的