shell case in语句

Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句。当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了。

if else 语句与case in语句的对比

  脚本 易错点与知识点
if else语句
  1. #!/bin/bash
  2. read -p ‘please input the month: ‘ month
  3. if ((month>=3 && month<=5))
  4. then echo ‘spring‘
  5. elif ((month>=6 && month<=8))
  6. then  echo ‘summer‘
  7. elif ((month>=9 && month<=11))
  8. then echo ‘autumn‘
  9. elif ((month==12 ||(month<=2&&month>0)))
  10. then echo ‘winter‘
  11. else
  12. echo ‘the month is error‘
  13. fi
  1. 使用((month==12 ||(month<=2&&month>0)))时,注意使用()将复杂逻辑括起来,避免混淆
  2. 使用((month==12 ||(month<=2&&month>0)))时,只能用month==12不能month=12,因为使用month=12会将month重新赋值,影响后续判断
case in语句
  1. !/bin/bash
  2. read -p ‘please input the month: ‘ month
  3. case $month in
  4. [3-5])
  5. echo ‘spring‘;;
  6. [6-8])
  7. echo ‘summer‘;;
  8. 9|10|11)
  9. echo ‘autumn‘;;
  10. 12|1|2)
  11. echo ‘winter‘;;
  12. *)
  13. echo ‘the month is error‘
  14. esac
  1. 不能使用[9-11]代表9到11的范围
  2. 使用|表示多重选择

case in语句的用法

用法 说明
case expression in
    pattern1)
        statement1
        ;;
    pattern2)
        statement2
        ;;
    pattern3)
        statement3
        ;;
    ……
    *)
        statementn
esac

1. case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式。

    • expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以。
    • pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。

2. case 会将 expression  的值与 pattern1、pattern2、pattern3 逐个进行匹配:

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

3. 对*)的几点说明:

    • *)部分可以省略,*)部分主要用于在 expression 没有匹配到任何一个模式时做一些“善后”工作,或者给用户一些提示

除最后一个分支外(这个分支可以是普通分支,也可以是*)分支),其它的每个分支都必须以;;结尾,;;代表一个分支的结束,不写的话会有语法错误。最后一个分支可以写;;,也可以不写,因为无论如何,执行到 esac 都会结束整个 case in 语句。

case in 和正则表达式

case in 的 pattern 部分支持简单的正则表达式,具体来说,可以使用以下几种格式:

格式 说明
* 表示任意字符串。
[abc] 表示 a、b、c 三个字符中的任意一个。比如,[15ZH] 表示 1、5、Z、H 四个字符中的任意一个。
[m-n] 表示从 m 到 n 的任意一个字符。比如,[0-9] 表示任意一个数字,[0-9a-zA-Z] 表示字母或数字。
| 表示多重选择,类似逻辑运算中的或运算。比如,abc | xyz 表示匹配字符串 "abc" 或者 "xyz"。

如果不加以说明,Shell 的值都是字符串,expression 和 pattern 也是按照字符串的方式来匹配的;最后一个分支*)并不是什么语法规定,它只是一个正则表达式,*表示任意字符串,所以不管 expression 的值是什么,*)总能匹配成功。

下面的例子演示了如何在 case in 中使用正则表达式:

脚本 结果
  1. #!/bin/bash
  2. printf "Input a character: "
  3. read -n 1 char
  4. case $char in
  5. [a-zA-Z])
  6. printf "\nletter\n"
  7. ;;
  8. [0-9])
  9. printf "\nDigit\n"
  10. ;;
  11. [,.?!])
  12. printf "\nPunctuation\n"
  13. ;;
  14. *)
  15. printf "\nerror\n"
  16. esac
运行结果1:
Input integer number: S
letter

运行结果2:
Input integer number: ,
Punctuation

原文地址:https://www.cnblogs.com/ting152/p/12554342.html

时间: 2024-11-10 14:54:35

shell case in语句的相关文章

Shell case in语句详解

和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句的用法,这节我们就来讲解 case in 语句. 当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. <Shell if else>一节的最后给出了一个例子,就是输入一个整数,输出该整数对应的星期几的英文表示,这节我们就用 case in 语句来重写代码,如下所示. #!

Linux Gvim shell case...esac语句

#case ..esac语句:与switch ..case类似,是一种多分支选择结构#case语句匹配一个值或一个模式,如果匹配成功执行相应命令,如果匹配不成功执行*命令#;;与break类似,代表跳到整个case语句的最后#case 值 in#模式1)#    command1#    ;;#模式2)#    command1#    ;;#*)#    command1#    ;;#esac#示例如下: 1 echo 'Input a number between 1 to 4' 2 ec

Shell case esac语句

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: case 值 in 模式1) command1 command2 command3 ;; 模式2) command1 command2 command3 ;; *) command1 command2 command3 ;; esac case工作方式如上所示.取值后面必须为关键字 in,每一模式

Shell case esac语句【转】

本文转载自:http://c.biancheng.net/cpp/view/7006.html C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习.QQ在线,随时响应! case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: cas

【Shell脚本学习17】Shell case esac语句

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: case 值 in 模式1) command1 command2 command3 ;; 模式2) command1 command2 command3 ;; *) command1 command2 command3 ;; esac case工作方式如上所示.取值后面必须为关键字 in,每一模式

Shell脚本之for、while循环语句和case分支语句

shell作为一种脚本编程语言,同样包含循环.分支等其他程序控制结构,从而轻松完成更加复杂.强大的功能 使用for循环语句 在工作中,经常遇到某项任务需要多次执行,而每次执行仅仅是处理对象不一样,其他命令都相同.使用简单的if语句已经难以满足要求,编写全部代码将困难重重,而for循环语句将很好的解决类似的问题 1. for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令,直到变量值用完退出循环 案例1:根据姓名列表批量建立用户 [[ema

浅谈Shell脚本中for循环、while循环及case分支语句

博文目录一.for循环语句二.使用while循环语句三.使用case分支语句 一.for循环语句 当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重.这将可以使用for循环语句很好的解决类似问题. 1.for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环.在这里,"取值列表"称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通

shell编程之case分支语句

shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 如果里面匹配到固定值:或某个变量存在多中取值,需要对其中的每一个取值分别执行不同的命令序列. case只是判断一个变量的不同取值. case的模式: 执行流程: 首先使用"变量值"与模式1进行比较,如果取值相同就执行模式1的命令序列1,直到遇见" ;; "后跳转到es

Shell脚本 (三)for循环 while循环 case分支语句

################for循环语句的结构#############使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环.在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象.需要预先指定(如通讯录.IP黑名单)·语法样式for 变量名 in 取值列表do 命令序列done·#####for循环语句列子####需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,初始密码均设