shell的case用法
今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支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用法的更多相关文章
- shell脚本学习之case用法及实例
case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ;;为止 ...
- shell脚本之case用法
你会经常发现自己在尝试计算一个变量的值,在一组可能的值中寻找特定值.在这种情形下, 你不得不写出很长的if-then-else语句,就像下面这样. $ cat test25.sh #!/bin/bas ...
- (二)shell中case语句、程序传参、while
2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...
- Linux上case用法
Linux上case用法示例: #!/bin/bash # This is a script for test case ASK_COUNT=$ #从参数获取该变量的值 # if [ -z " ...
- sql case 用法总结
快下班了,抽点时间总结一下sql 的 case 用法. sql 里的case的作用: 用于计算条件列表的表达式,并返回可能的结果之一.sql 的case 类型于编程语言里的 if-esle if-el ...
- Shell expr的用法 bc 命令 let命令
Shell expr的用法 bc 命令 let命令 数学运算 let命令 expr命令 bc命令 $(()) $[] http://www.80ops.cn/archives/245. ...
- hbase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- 【转载】HBase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- shell的case语句简述(shell的流控制)
shell流控制:http://www.cnblogs.com/yunjiaofeifei/archive/2012/06/12/2546208.html 1.if then else 语句 if t ...
随机推荐
- spring boot多数据源配置(mysql,redis,mongodb)实战
使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...
- 开源任务调度平台elastic-job-lite源码解析
前段时间写过一遍文章<一文揭秘定时任务调度框架quartz>,有读者建议我再讲讲elastic-job这个任务调度框架,年末没有那么忙,就来学习一下elastic-job. 首先一点,el ...
- MySQL的使用及优化
前言 最近听了公司里的同事做的技术分享,然后觉得对自己还是挺有帮助的.都是一些日常需要注意的地方,我们目前在开发过程中,其实用不到MySQL太深的内容的.只是能适用我们日常开发的知识就可以了.所以我将 ...
- 如何扩展VS2017未安装的功能
扩展VS2017未安装的功能 我们在使用VS2017时,由于VS2017该ide功能过于强大,使用范围涵盖多个领域,我们在安装VS2017时很多时候只需要安装自己需要的某部分的功能即可,这个步骤在软件 ...
- @Html.xxxxxFor() 规范写法
@Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...
- mysql双主+keepalived
环境 OS: centos7Mysql 版本: mysql 5.7Keepalived: keepalived-1.2.20Mysql-vip:192.168.41.100Mysql-master1: ...
- frp 初探
条件: (1) 服务器端要有公网 IP (2) 客户端能上网,能够访问服务器的公网 IP 下载 https://github.com/fatedier/frp/releases 根据服务器和客户端的操 ...
- RNN-LSTM入门
RNN-LSTM入门 Last Edited: Dec 02, 2018 10:20 PM Tags: 机器学习,论文阅读 RNN-Recurrent Neural Network 概念: 序列数据: ...
- C#开源框架(转载)
Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Li ...
- Java线程池 Executor框架概述
线程池的意义 循环利用线程资源,避免重复创建和销毁线程 线程池的任务是异步执行的,只要提交完成就能快速返回,可以提高应用响应性 Java线程池还有一个很重要的意义:Java线程池就是JDK 5 推出的 ...