当前位置: 首页 > 工具软件 > Casein > 使用案例 >

shell中的 case in 用法

万俟穆冉
2023-12-01

shell中的 case in 用法

用法

case;in;esac都是shell关键字

expression是表达式(既可以是一个变量,一个数字,一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要可以得到expression的值就行)

pattern是匹配模式(一个数字,一个字符串,或者一个简单的正则表达式)

case expression in
   pattern1)
      statement1
      ;;
   pattern2)
      statement2
      ;;
   ......
   *)
      statement2
esac

工作模式

case会将expression的值与pattern1~n进行匹配:

1 如果expression和某个模式匹配成功,就会执行这个模式后面对应的所有语句,知道遇见分号;;才停止

然后真各国case语句就执行完毕,程序会跳出case语句,执行esac后面的语句。

2 如果expression没有匹配到任何一个模式,那么就执行*) 后面的语句,知道遇见双分号;;或者esac才结束。

相当于多个if语句中的else语句。

3 如果expression没有匹配到任何一个模式,那么*)部分就可以做善后工作,或者给用户一些提示。

4 可以没有*)部分。如果没有匹配到任何一个模式,那么就不执行任何操作。

 

注意:

除最后一个一个分支外,其它分支必须以;;结尾,;;代表一个分支的结束,不写会程序错误。

esac会结束整个case in语句。


 

case in 的pattern 支持部分简单的正则表达式:

格式               说明

*            表示任意字符串

[abc]          表示a b c三个字符中的任意一个

m-n            表示m-n中的任意一个字符

I(竖杠)   表示多重选择类似于或运算

#!/bin/bash

echo “Please input a number”

read num

case $num in

1)
    echo “haha”
    ;;
2)
    echo “hehe”
         ;;
3)
         echo “xixi”
         ;;
4)
         echo “dudu”
         ;;
*)    
         echo “error”
esac

 

[root@localhost case]# sh 01.sh

Please input a number

2

Hehe

#如果此处需要用echo的话,就不能用read -n 1 因为没有用户输入完整的数据完成后时没有换行符的

#-n 1表示只读一个字符,运行脚本后,只要用户输入一个字符,立即读取结束,不用等待用户按下回车键

 

[root@localhost case_in]# cat 02.sh

#!/bin/bash

echo "In put a character:"

#如果此处需要用echo的话,就不能用read -n 1 因为没有用户输入完整的数据完成后时没有换行符的

#-n 1表示只读一个字符,运行脚本后,只要用户输入一个字符,立即读取结束,不用等待用户按下回车键

read -n 1 char

case $char in
    [a-zA-Z])
         echo "letter"
         ;;
    [0-9])
         echo "Digit"
         ;;
    [,.?!])
         echo "Punctuation"
         ;;
    *)
esac

 

[root@localhost case_in]# sh 02.sh

In put a character:

5Digit

[root@localhost case_in]#

[root@localhost case_in]# sh 02.sh

In put a character:

gletter

[root@localhost case_in]#

[root@localhost case_in]# sh 02.sh

In put a character:

.Punctuation

 

 类似资料: