今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支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. thinkphp自动创建数据对象分析

    thinkphp有一个自动创建数据对象的create方法,核心代码如下 public function create($data='',$type='') { // 如果没有传值默认取POST数据 i ...

  2. Perl的time、localtime和gmtime函数

    time用于返回当前时间点,但返回结果是以从1970年1月1日(纪元由操作系统决定,但unix系统一般都是1970年1月1日)距离现在的秒数表示的 localtime用于返回给定时间的秒.分.时.日. ...

  3. Linux文件权限与属性详解 之 一般权限

    目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...

  4. Python爬虫之提取Bing搜索的背景图片并设置为Windows的电脑桌面

      鉴于现阶段国内的搜索引擎还用不上Google, 笔者会寻求Bing搜索来代替.在使用Bing的过程中,笔者发现Bing的背景图片真乃良心之作,十分赏心悦目,因此,笔者的脑海中萌生了一个念头:能否自 ...

  5. 关于Android屏幕的参数

    屏幕尺寸信息: 级别 对应Drawable dp尺寸 Layout 文件夹 案例 标注 small drawable-ldpi 426x320 dp layout-small 典型 (240x320 ...

  6. log4j-1.2.6升级到log4j-2.9.0

    0.工程是普通java web工程,不是maven工程.需要升级log4j 步骤发下: 1. 在build path中 移除项目对log4j-1.2.6.jar的引用,并物理删除log4j-1.2.6 ...

  7. T-SQL基础(六)之可编程对象

    变量 -- 声明变量 DECLARE @variable_name [AS] variable_type; -- 变量赋值 SET @variable_name = variable_value; 示 ...

  8. Newtonsoft.Json(Json.net) 的使用

    Newtonsoft.Json(Json.net) 的使用 //Newtonsoft.Json.dll using Newtonsoft.Json; using Newtonsoft.Json.Con ...

  9. http协议、web服务器、并发服务器(上)

    目录 1. HTTP格式 1.1 HTTP GET请求的格式: 1.2 HTTP POST请求的格式: 1.3 HTTP响应的格式: 2. Web静态服务器-显示固定的页面 3. Web静态服务器-显 ...

  10. mysql length和char_length

    length和char_length都是为了统计字符串的长度,length是按照字节来统计,char_lenght是按照字符来统计. 位(bit):计算机储存的最小单位. 字节(byte):计算机处理 ...