今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支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多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  2. 开源任务调度平台elastic-job-lite源码解析

    前段时间写过一遍文章<一文揭秘定时任务调度框架quartz>,有读者建议我再讲讲elastic-job这个任务调度框架,年末没有那么忙,就来学习一下elastic-job. 首先一点,el ...

  3. MySQL的使用及优化

    前言 最近听了公司里的同事做的技术分享,然后觉得对自己还是挺有帮助的.都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到MySQL太深的内容的.只是能适用我们日常开发的知识就可以了.所以我将 ...

  4. 如何扩展VS2017未安装的功能

    扩展VS2017未安装的功能 我们在使用VS2017时,由于VS2017该ide功能过于强大,使用范围涵盖多个领域,我们在安装VS2017时很多时候只需要安装自己需要的某部分的功能即可,这个步骤在软件 ...

  5. @Html.xxxxxFor() 规范写法

    @Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...

  6. mysql双主+keepalived

    环境 OS: centos7Mysql 版本: mysql 5.7Keepalived: keepalived-1.2.20Mysql-vip:192.168.41.100Mysql-master1: ...

  7. frp 初探

    条件: (1) 服务器端要有公网 IP (2) 客户端能上网,能够访问服务器的公网 IP 下载 https://github.com/fatedier/frp/releases 根据服务器和客户端的操 ...

  8. RNN-LSTM入门

    RNN-LSTM入门 Last Edited: Dec 02, 2018 10:20 PM Tags: 机器学习,论文阅读 RNN-Recurrent Neural Network 概念: 序列数据: ...

  9. C#开源框架(转载)

    Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Li ...

  10. Java线程池 Executor框架概述

    线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的 ...