今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支if语句,如下:

case语法:

case "字符串变量" in

  值1)指令1...

;;

  值2)指令2...

;;

......

      *)指令3...

esac

--------------------------------------------------------------------------------------

ok,我们可以换一种方式理解:

中文编程语法:

case "找女朋友条件" in

  有房)嫁给你...

;;

  你爸是李刚) 嫁给你...

;;

  有上进心) 可以考虑先做朋友...

;;

  *)good bye bye! ...

esac

---------------------------------------------------------------------

下面我们拿根据菜单选项手机充值脚本一个例子来测试一下效果:

测试1:根据用户的输入值判断 是哪个数字,给出相对应的服务或提示信息

 [root@bqh-117 scripts]# vim case1.sh
#!/bin/sh
#date:2019-04-20
#maill:1147076062@qq.com
#author:aゞ锦衣卫
#script function:This is a order script.
#===============================================
function menu() {
cat <<bqh #定义menu打印菜单函数
手机充值一键服务:
===============================
1.10元RMB
2.30元RMB
3.50元RMB
4.100元RMB
5.我再考虑考虑... author:a?锦衣卫
date:2019-04-20
===============================
bqh
}
menu function usage() { #定义usage函数用与交互式提示信息
echo "请输入充值类型{1|2|3|4|5}"
} read -p "客官,您想充值多少RMB:" num #read方式获取值
expr $num + 1 &>/dev/null #检测num参数是否为整数
if [ $? -ne 0 ];then #判断num参数是否为整数,如果不是给出提示并退出
usage
exit 0
fi if [ "$num" -eq 0 ];then #判断读取的参数是否等于0,若是则给出提示并退出
usage
exit 1
elif [ "$num" -gt 5 ];then #判断读取的参数是否大于5,若是则给出提示并退出
usage
exit 2
elif [ "$num" -eq 1 ];then
echo "老板,充值10元RMB"
elif [ "$num" -eq 2 ];then
echo "老板,充值30元RMB"
elif [ "$num" -eq 3 ];then
echo "老板,充值50元RMB"
elif [ "$num" -eq 4 ];then
echo "老板,充值100元RMB"
else
echo "老板,我再考虑考虑..." #若以上都不符合,则给出提示并退出
exit 3
fi

执行脚本效果如下:

上面用if语句写的,感觉比较繁琐,代码量多,下面我们用case语句来实现以下:

 [root@bqh-117 scripts]# vim case1.sh
#!/bin/sh
#date:2019-04-20
#maill:1147076062@qq.com
#author:aゞ锦衣卫
#script function:This is a order script.
#===============================================
function menu() {
cat <<bqh #定义menu打印菜单函数
手机充值一键服务:
===============================
1.10元RMB
2.30元RMB
3.50元RMB
4.100元RMB
5.我再考虑考虑... author:aゞ锦衣卫
date:2019-04-20
===============================
bqh
}
menu
#color
RED='\E[1;31m' # 红
GREEN='\E[1;32m' # 绿
YELOW='\E[1;33m' # 黄
BLUE='\E[1;34m' # 蓝
PINK='\E[1;35m' # 粉红
SHAN='\E[31;5m' # 闪烁提示
RES='\E[0m' # 清除颜色 function usage() { #定义usage交互式函数用户提示
echo -e "${SHAN}请输入充值类型{1|2|3|4|5}$RES"
} read -p "客官,您想充值多少RMB:" num #以read方式获取用户输入值
expr $num + 1 &>/dev/null #检测用户输入值是否为整数,并将结果定向、空控设备
if [ $? -ne 0 ];then #判断检测结果是否为0,若为0则给出交互式提示并退出
usage
exit 0
fi case $num in #判断num值符合菜单相对应的信息,并给出提示。
1)
echo "老板,充值10元RMB"
;;
2)
echo "老板,充值30元RMB"
;;
3)
echo "老板,充值50元RMB"
;;
4)
echo "老板,充值100元RMB"
;;
5)
echo "老板,我再考虑考虑..."
exit 1
;;
*) #若以上都不符合,则给出交互式提示并退出。
usage
exit 2
;;
esac

执行脚本效果如下:

case工作原理如上面脚本模式,取值后面必须为关键字 in,每一模式必须以右括号结束,取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 “;;”,;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

shell的case用法的更多相关文章

  1. shell脚本学习之case用法及实例

    case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ;;为止 ...

  2. shell脚本之case用法

    你会经常发现自己在尝试计算一个变量的值,在一组可能的值中寻找特定值.在这种情形下, 你不得不写出很长的if-then-else语句,就像下面这样. $ cat test25.sh #!/bin/bas ...

  3. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  4. Linux上case用法

    Linux上case用法示例: #!/bin/bash # This is a script for test case ASK_COUNT=$ #从参数获取该变量的值 # if [ -z " ...

  5. sql case 用法总结

    快下班了,抽点时间总结一下sql 的 case 用法. sql 里的case的作用: 用于计算条件列表的表达式,并返回可能的结果之一.sql 的case 类型于编程语言里的 if-esle if-el ...

  6. Shell expr的用法 bc 命令 let命令

    Shell expr的用法  bc 命令   let命令 数学运算 let命令  expr命令  bc命令  $(())   $[] http://www.80ops.cn/archives/245. ...

  7. hbase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  8. 【转载】HBase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  9. shell的case语句简述(shell的流控制)

    shell流控制:http://www.cnblogs.com/yunjiaofeifei/archive/2012/06/12/2546208.html 1.if then else 语句 if t ...

随机推荐

  1. Spring Boot (四)模板引擎Thymeleaf集成

    一.Thymeleaf介绍 Thymeleaf是一种Java XML / XHTML / HTML5模板引擎,可以在Web和非Web环境中使用.它更适合在基于MVC的Web应用程序的视图层提供XHTM ...

  2. HTTP协议学习(一)

    一.HTTP报文的组成 请求报文由 请求行.请求头.请求空行.请求实体四部分组成.其中,请求行和请求头共同组成 请求报文头部 请求行:一行,依次由 请求方法.URI(或者应该说是域名?).HTTP协议 ...

  3. μC/OS-II 的系统时钟

    简介 μC/OS-II 与大多数计算机系统一样,用硬件定时器产生一个周期为 ms 级的周期性中断来实现系统时钟,最小的时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时钟节拍(Time Ti ...

  4. Django 系列博客(二)

    Django 系列博客(二) 前言 今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳. 命令行搭建 Django 项目 创建纯净虚拟环境 在上一篇博客 ...

  5. 南大算法设计与分析课程复习笔记(3)L3 - Recursion

    一.递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一.解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1.猜解的形式 2.数学归纳法证明正确 例子: 我们假设有如下递归式: ...

  6. IEnumerable,ICollection,IList接口问题

    最近有一个疑问:IList已经继承了ICollection<T>,而ICollection<T>继承了 IEnumerable<T>, IEnumerable,那为 ...

  7. [android] 采用断点调试的方式观察pull解析的流程

    当程序出现错误的时候,界面出不来,这个时候就需要调试技巧,描述这个程序在哪个地方出现的问题.在你认为可能出错的代码部分,左侧的行号栏点击打断点,在项目目录右键 ==>debug as ==> ...

  8. go里面的指针用法

    什么是指针 指针是存储一个变量的内存地址的变量. 在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中.变量 a 存储了变量 b 的地址.现在可以说 a 指向 b. 指针的 ...

  9. 新浪IP库地址

    新浪IP库地址 http://int.dpool.sina.com.cn/iplookup/iplookup.php

  10. JDK的动态代理-----为接口进行代理

    JDK的动态代理是必须掌握的,动态代理的好处就不用我多说了吧 :) 小弟最近在研究mybatis的源码实现,就开始了解mybatis的Mapper代理机制,为什么接口不用实现类也能代理? 好了,废话不 ...