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 ...
随机推荐
- thinkphp自动创建数据对象分析
thinkphp有一个自动创建数据对象的create方法,核心代码如下 public function create($data='',$type='') { // 如果没有传值默认取POST数据 i ...
- Perl的time、localtime和gmtime函数
time用于返回当前时间点,但返回结果是以从1970年1月1日(纪元由操作系统决定,但unix系统一般都是1970年1月1日)距离现在的秒数表示的 localtime用于返回给定时间的秒.分.时.日. ...
- Linux文件权限与属性详解 之 一般权限
目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...
- Python爬虫之提取Bing搜索的背景图片并设置为Windows的电脑桌面
鉴于现阶段国内的搜索引擎还用不上Google, 笔者会寻求Bing搜索来代替.在使用Bing的过程中,笔者发现Bing的背景图片真乃良心之作,十分赏心悦目,因此,笔者的脑海中萌生了一个念头:能否自 ...
- 关于Android屏幕的参数
屏幕尺寸信息: 级别 对应Drawable dp尺寸 Layout 文件夹 案例 标注 small drawable-ldpi 426x320 dp layout-small 典型 (240x320 ...
- 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 ...
- T-SQL基础(六)之可编程对象
变量 -- 声明变量 DECLARE @variable_name [AS] variable_type; -- 变量赋值 SET @variable_name = variable_value; 示 ...
- Newtonsoft.Json(Json.net) 的使用
Newtonsoft.Json(Json.net) 的使用 //Newtonsoft.Json.dll using Newtonsoft.Json; using Newtonsoft.Json.Con ...
- http协议、web服务器、并发服务器(上)
目录 1. HTTP格式 1.1 HTTP GET请求的格式: 1.2 HTTP POST请求的格式: 1.3 HTTP响应的格式: 2. Web静态服务器-显示固定的页面 3. Web静态服务器-显 ...
- mysql length和char_length
length和char_length都是为了统计字符串的长度,length是按照字节来统计,char_lenght是按照字符来统计. 位(bit):计算机储存的最小单位. 字节(byte):计算机处理 ...