`
tomotoboy
  • 浏览: 166855 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

控制流结构——case

阅读更多
case语句
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case 值 in
模式1 )
  命令1
  . . .
  ;;
模式2 )
  命令2
  . . .
  ;;
esac


case工作方式如上所示。取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号*捕获该值,再接受其他输入。模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即:
*任意字符。
任意单字符。
[..]类或范围中任意字符。

来看一个简单的case语句:
/home/l/g/tomotoboy >cat caseselect
#!/bin/sh
#caseselect
echo - n "Enter a number from 1 to 5 :"
read ANS
 case $ANS in
1) echo "you select 1"
;;
2) echo "you select 2"
;;
3) echo "you select 3"
;;
4) echo "you select 4"
;;
5) echo "you select 5"
;;
*) echo "`basename $0`: This is not between 1 and 5" >&2
;;
esac

/home/l/g/tomotoboy >caseselect
- n Enter a number from 1 to 5 :
4
you select 4
/home/l/g/tomotoboy >caseselect
- n Enter a number from 1 to 5 :
7
caseselect: This is not between 1 and 5


对匹配模式使用|
/home/l/g/tomotoboy >cat caseterm
#!/bin/sh
#caseterm
echo "choices are.. vt100, vt102, vt220"
echo -n "enter your terminal type :"
read TERMINAL
 case $TERMINAL in
 vt100|vt102) TERM=vt100
 ;;
 vt220) TERM=vt220
 ;;
 *) echo "`basename $0`: Unknown reponse" >&2
   echo "setting it to vt100 anyway,so there"
   TERM=vt100
 ;;
esac
export TERM
echo "Your terminal is set to $TERM'
"caseterm" 17 lines, 348 characters

/home/l/g/tomotoboy >caseterm
choices are.. vt100, vt102, vt220
-n enter your terminal type :
vt100
Your terminal is set to vt100'

提示键入y或n
case的一个有效用法是提示用户响应以决定是否继续进程。这里提示输入y以继续处理n退出。如果用户输入Y、y或yes,处理继续执行case语句后面部分。如果用户输入N、n或no或其他响应,用户退出脚本。
/home/l/g/tomotoboy >cat caseans
#!/bin/sh
#caseans
echo -n "Do you wish to proceed [y..n]"
read ANS
 case $ANS in
 y|Y|yes|Yes) echo "yes is selected"
 ;;
 n|N|no|No) echo "no is selectd"
 ;;
 *) echo "`basename $0` : Unknown response" >&2
 ;;
 esac

/home/l/g/tomotoboy >caseans
-n Do you wish to proceed [y..n]
y
yes is selected


case与命令参数传入
/home/l/g/tomotoboy >cat >> caseparam
#!/bin/sh
#caseparam
if [ $# != 1 ];then
   echo "Usage:`basename $0` [start|stop|help]" >&2
fi
OPT=$1
case $OPT in
 start) echo "starting..`basename $0`"
;;
 stop) echo "stopping..`basename $0`"
;;
 help) echo "stopping..`basename $0`"
 echo "Usage:`basename $0` [start|stop|help]"
;;
 *) echo "stopping..`basename $0`"
 echo "Usage:`basename $0` [start|stop|help]"
;;
esac
/home/l/g/tomotoboy >chmod u+x caseparam
/home/l/g/tomotoboy >caseparam help
stopping..caseparam
Usage:caseparam [start|stop|help]
/home/l/g/tomotoboy >caseparam start
starting..caseparam


捕获输入并执行空命令
不一定要在匹配模式后加入命令,如果你原本不想做什么,只是在进一步处理前过滤出意外响应,这样做是一种好办法。如果要运行对应于一个会计部门的帐目报表,必须首先在决定运行报表的类型前确认用户输入一个有效的部门号,匹配所有可能值,其他值无效。用case可以很容易实现上述功能。下面的脚本中如果用户输入部门号不是234、453、655或454,用户退出并返回可用信息。一旦响应了用户的有效部门号,脚本应用同样的技术取得报表类型,在case语句末尾显示有效的部门号和报表类型。脚本如下:
#!/bin/sh
# casevalid
echo -n "enter the account dept No: "
read ACC
 case $ACC in
      234);;
      453);;
      655);;
      454);;
         *) echo "basename $01`: Unknon dept No"
              echo "try..234,453,655,454"
              exit 1
              ;;
esac
#if we are here, then we have a validdated the dept no
echo " 1 . post"
echo " 2 . prior"
echo -n "enter the type of report: "
read ACC_TYPE
   case $ACC_TYPE in
   1)TYPE=post;;
   2)TYPE=prior;;
   *) echo "`basename $0`: Unknown account type." >&2
"casevalid" 29 lines, 665 characters
/home/l/g/tomotoboy >casevalid
-n enter the account dept No:
454
 1 . post
 2 . prior
-n enter the type of report:
1
now running report for dept 454 for the type post


分享到:
评论

相关推荐

    数据结构课程设计——运动会分数统计 C++

    数据结构课程设计——运动会分数统计 C++ 在本次课程设计中,我们需要实现一个基于C++的运动会分数统计系统。系统的核心是有效地存储和处理比赛数据,包括学校信息、比赛项目及成绩,然后根据这些数据进行各种统计...

    Swift教程:控制流 控制转移语句-break

    在Swift编程语言中,控制流是程序执行顺序的关键部分,它决定了代码如何根据条件和循环进行执行。控制转移语句则是改变程序正常流程的一种手段,它们允许你在特定条件下提前结束循环或者跳出多重嵌套结构。本教程将...

    揭秘控制流的秘密:Java中的if, for, while

    本文将深入解析Java中的三种核心控制流语句——if、for、while及其变体,并通过具体的实例帮助读者更好地理解和运用这些语句。 #### 第一章:if语句的精妙 **1.1 基础语法与应用** if语句是最基本的条件判断语句...

    java基础——————试题库

    4. **控制结构** - 条件语句:if, if-else, switch-case。 - 循环:for, while, do-while循环,以及break和continue语句。 - 分支结构:三元运算符(condition ? expr1 : expr2)。 5. **方法(函数)** - 方法...

    C语言游戏——死神vs火影

    1. **基本语法**:变量声明、类型转换、控制流(if-else、switch-case、循环)、函数定义和调用等。 2. **指针**:作为C语言的核心特性,指针用于高效地操作内存,实现复杂的数据结构如链表、树等。 3. **结构体与...

    C#全能速查宝典

    1.4.7 DateTime结构——表示时间上的一刻 50 1.4.8 DAY函数——返回日期部分的整数 51 1.4.9 DayOfWeek属性——获取星期几 52 1.4.10 Equals方法——比较两个字符串对象 53 1.4.11 First函数——返回查询结果的第一...

    C语言课程设计——图书管理系统.zip

    图书管理系统通常包括图书的添加、删除、查询、借阅和归还等功能,涉及到数据库操作和控制流等核心编程概念。 【可能涉及的知识点】 1. **C语言基础**:包括变量定义、数据类型、运算符、控制结构(如if-else、...

    chc6072-lecture3-0.pptx

    本讲座主要探讨了控制流测试,这是结构化测试的一种形式。 首先,回顾上周二的讲座内容,我们了解了软件测试的基础概念,包括测试用例、测试数据等。基于风险的功能测试强调根据功能的风险等级分配测试资源,通过...

    UML系统建模课件——课程全部ppt

    7. **活动图(Activity Diagram)**:活动图用于表示业务流程或系统执行的步骤,类似于流程图,关注控制流和数据流。 8. **组件图(Component Diagram)**:组件图描述软件系统的物理架构,显示软件组件及其依赖...

    LabVIEW编程样式——清晰版

    2. **流程控制**:讨论了条件结构、循环结构(For Loop、While Loop)、Case结构等,这些都是实现复杂逻辑的关键。 3. **数据流编程**:LabVIEW是事件驱动和数据流编程模型,书中会解释这种模型的工作原理和优势,...

    Tutorial 1 - ICEM划分结构网格1

    本教程以日本建筑协会(AIJ)公开的验证案例——Case D为例,该案例包括各种不同类型的建筑模型,适合用于CFD软件的实验数据验证。教程首先指导如何将几何模型导入ICEM。ICEM使用块(Block)的概念,将复杂的几何体...

    C语言程序设计循环例子PPT课件.pptx

    #### 一、多分支选择结构——`switch`语句 在C语言程序设计中,`switch`语句是一种常用的多分支选择结构,用于实现根据某个表达式的值来选择执行不同的代码块。这对于处理具有多个选项的情况非常有用。 **1. `...

    labview从入门到精通教程实例

    LabVIEW提供了两种主要类型的分支结构——选择结构(选择结构函数)和判断结构(If Case结构)。选择结构允许基于单个条件执行不同的分支,而判断结构可以处理多个条件组合。 3. **循环结构**:循环是重复执行某段...

    c 语言——程序设计试题

    3. **控制结构**:包括条件语句(if...else, switch...case)和循环语句(for, while, do...while)。这些结构用于控制程序流程,根据不同的条件执行不同的代码块,或重复执行某段代码直到满足特定条件。 4. **函数...

    01第1章 初识C++——C++程序设计入门

    首先,C++程序的基本结构通常包括预处理指令、函数定义、变量声明和控制流语句。预处理指令以`#`开头,如`#include`用于引入头文件,`#define`用于常量定义。头文件中包含了库函数和类型定义,如`<iostream>`是输入...

    数学计算软件——MATLAB课件

    接下来,掌握MATLAB的控制流语句是编程的关键。这包括条件语句(如if-else-end)、循环语句(如for和while)以及开关控制(switch-case-end)。这些语句允许你根据特定条件执行不同的代码块,实现复杂逻辑。 函数是...

    ruby——course.pdf

    从给定的文件信息中,我们可以提取出关于Ruby编程语言的多个关键知识点,这些知识点涵盖了Ruby的基本语法、对象导向特性以及控制结构等重要方面。以下是对这些知识点的详细阐述: ### 1. HelloWorld 示例 在任何...

    计算机经典——软件需求文档

    概述部分可能会阐述需求文档的目的、目标读者和文档的组织结构。 2. **2requirement_elicitation.pdf**:需求获取是需求工程的第一步,这个过程涉及到与客户、用户和其他利益相关者的沟通,以了解他们的需求和期望...

Global site tag (gtag.js) - Google Analytics