sh4.case语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。
case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
- case 值 in
- 模式1)
- command1
- command2
- command3
- ;;
- 模式2)
- command1
- command2
- command3
- ;;
- *)
- command1
- command2
- command3
- ;;
- esac
case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
例1,
- echo 'Input a number between 1 to 4'
- echo 'Your number is:\c'
- read aNum
- case $aNum in
- ) echo 'You select 1'
- ;;
- ) echo 'You select 2'
- ;;
- ) echo 'You select 3'
- ;;
- ) echo 'You select 4'
- ;;
- *) echo 'You do not select a number between 1 to 4'
- ;;
- esac
- # read 输入语句 类似 input
- 输入不同的内容,会有不同的结果,例如:
- Input a number between to
- Your number is:
- You select
例2:
- #!/bin/bash
- option="${1}"
- case ${option} in
- -f) FILE="${2}"
- echo "File name is $FILE"
- ;;
- -d) DIR="${2}"
- echo "Dir name is $DIR"
- ;;
- *)
- echo "`basename ${0}`:usage: [-f file] | [-d directory]"
- exit # Command to come out of the program with status
- ;;
- esac
- [root@localhost test]# ./case2.sh -d ddsss
- Dir name is ddsss
- [root@localhost test]# ./case2.sh -f ddsss
- File name is ddsss
练习:写一个脚本 showlogged.sh, 其用法格式为:
showlogged.sh -v -c -h|--help
其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户,如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息:
- #/bin/bash
- #
- declare -i SHOWNUM=
- declare -i SHOWUSERS=
- for I in `seq $#`;do
- if [ $# -gt ];then
- case $ in
- -h|--help)
- echo "Usage:`basename $0` -h|--help -c|count -v|--verbose"
- exit ;;
- -v|--verbose)
- let SHOWUSERS=
- shift ;;
- -c|--count)
- let SHOWNUM=
- shift ;;
- *)
- echo "Usage:`basename $0` -h|--help -c|count -v|--verbose"
- exit ;;
- esac
- fi
- done
- if [ $SHOWNUM -eq ];then
- echo "Logged users:`who | wc -l`."
- if [ $SHOWUSERS -eq ];then
- echo "They are:"
- who
- fi
- fi
- [root@beary test]# ./case4.sh -c
- Logged users:.
- [root@beary test]# ./case4.sh -c -v
- Logged users:.
- They are:
- root tty1 -- :
- root pts/ -- :
添加,删除用户脚本:
case 优化版
-v 显示执行过程,-add ,-del 可同时使用
- [root@beary test]# cat case3.sh
- #/bin/bash
- #
- DEBUG=
- ADD=
- DEL=
- for I in `seq $#`;do
- if [ $# -gt ];then
- case $ in
- -v|--verbose)
- DEBUG=
- shift
- ;;
- -h|--help)
- echo "Usage:`basename $0` -add USER_LIST -del USER_LIST -v|--verbose -h|--help"
- exit
- ;;
- -add)
- ADD=
- ADDUSERS=$
- shift
- ;;
- -del)
- DEL=
- DELUSERS=$
- shift
- ;;
- *)
- echo "Usage:`basename $0` -add USER_LIST -del USER_LIST -v|--verbose -h|--help"
- exit
- ;;
- esac
- fi
- done
- if [ $ADD -eq ];then
- for USER in `echo $ADDUSERS | sed 's#,# #g'`;do
- if id $USER &> /dev/null;then
- [ $DEBUG -eq ] && echo "$USER exists."
- else
- useradd $USER
- [ $DEBUG -eq ] && echo "Add user $USER finished."
- fi
- done
- fi
- if [ $DEL -eq ];then
- for USER in `echo $DELUSERS | sed 's#,# #g'`;do
- if id $USER &> /dev/null;then
- userdel -r $USER
- [ $DEBUG -eq ] && echo "Del user $USER finished."
- else
- [ $DEBUG -eq ] && echo "$USER no such!!"
- fi
- done
- fi
- [root@beary test]# ./case3.sh -v -add xin,fd,dd,dfdkl -del xin,fd,dd
- Add user xin finished.
- Add user fd finished.
- Add user dd finished.
- Add user dfdkl finished.
- Del user xin finished.
- Del user fd finished.
- Del user dd finished.
sh4.case语句的更多相关文章
- 为什么说在使用多条件判断时switch case语句比if语句效率高?
在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...
- 在 case 语句中使用字符串-转
http://www.cnblogs.com/del/archive/2008/07/08/1237856.html 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效 ...
- Oracle IF & CASE语句
IF语句主要有以下三种基本形式: 一. IF-THEN语句 IF CONDITION THEN STATEMENT 1; ... STATE ...
- Mysql之case语句(附带实例)
这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case when… then …end 1.判断的同时改变其值 eg: ...
- case语句
case语句是多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择结构.例如,学生成绩分类(90分以上为A,--):人口统计分类(按年龄分为老.中.青.少.幼)等.当然这些 ...
- shell script 学习笔记-----if,for,while,case语句
1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...
- (二)shell中case语句、程序传参、while
2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...
- [shell基础]——if/for/while/until/case 语句
for语句 do echo $loop done ` do echo $loop done for loop in `ls /tmp` do echo $loop done while语句 while ...
- java中的Switch case语句
java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...
随机推荐
- 纯css,编写菜单移入效果
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- flask-- 基础篇
flask简介: flask是一轻量级的web应用框架,它的实现是一个 wsgi 的微("Micro")框架,当然微("Micro")也不意味这它的功能存在不足 ...
- ActiveMQ_Mqtt的TCP丢包
现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...
- 安装Windows10,Ubuntu双系统14.04LTS记录
参考链接:http://www.jianshu.com/p/2eebd6ad284d(推荐直接看这个链接,我也是看这篇博客装的)然后自己记录一下,防止以后找不到了 本记录是在Windows10 上安装 ...
- oracle--存储过程--bai
--1 无入参最简单的存储过程 create or replace procedure hello_proc as v_name varchar2(20); v_age number; begin v ...
- C#之类的使用
属性与字段的使用类似iOS class Class1 { //字段私有,属性公有 private string _name; private int _age; /*control + r -> ...
- es6学习笔记(1) let和const命令详解
let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...
- vue自定义指令
Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...
- 【译】使用 CocoaPods 模块化iOS应用
原文翻译自:Using CocoaPods to Modularize a Big iOS App 为你的移动应用选择正确的架构是一件相当大的事情,这会对你的工作流程造成影响,陷入面对的问题,可能是一 ...
- 兼容好的JS图片上传预览代码
转 : http://www.codefans.net/articles/1395.shtml 兼容好的JS图片上传预览代码 (谷歌,IE11) <html xmlns="http:/ ...