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语句的更多相关文章

  1. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

  2. 在 case 语句中使用字符串-转

    http://www.cnblogs.com/del/archive/2008/07/08/1237856.html 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效 ...

  3. Oracle IF & CASE语句

    IF语句主要有以下三种基本形式: 一. IF-THEN语句 IF CONDITION THEN           STATEMENT 1;           ...           STATE ...

  4. Mysql之case语句(附带实例)

    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case  when… then …end 1.判断的同时改变其值 eg:   ...

  5. case语句

    case语句是多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择结构.例如,学生成绩分类(90分以上为A,--):人口统计分类(按年龄分为老.中.青.少.幼)等.当然这些 ...

  6. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...

  7. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  8. [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 ...

  9. java中的Switch case语句

    java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...

随机推荐

  1. SQLMap Tamper Scripts Update 04/July/2016

    SQLMap Tamper Scripts Update apostrophemask.py Replaces apostrophe character with its UTF-8 full wid ...

  2. JS this指向

    正常模式 在正常模式下独立函数的的 this 指向 undefined 或 window. <script type="text/javascript"> functi ...

  3. linux安装maven

    一.下载maven 最新地址在:http://maven.apache.org/download.cgi 我下载的是:apache-maven-3.3.9-bin.tar.gz,是已经编译好的包 解压 ...

  4. 添加自编译的apache为linux系统服务

    步骤1添加服务脚本 #cp /app/apache2/bin/apachectl /etc/rc.d/init.d/httpd #ln -s /etc/rc.d/init.d/httpd /etc/r ...

  5. springboot + mysql 编写

    1.springboot+mysql连接因为用的是hibernate框架,所以首先修改model,增加如下内容:

  6. 深入理解Java中的String

    一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...

  7. JavaScript 秘密花园 学习心得

    目的 记录一下学习心得,便于以后复习,内容是比较基础的...但是很多内容我还是不知道... 对象 对象使用和属性 1.JavaScript 中所有变量都可以当作对象使用,除了两个例外 null和dun ...

  8. 拖动对象ondrag

    说明: 在进行拖放操作时,dataTransfer 对象用来保存被拖动的数据.它可以保存一项或多项数据.一种或者多种数据类型.dataTransfer对象有两个主要的方法:getData()方法和se ...

  9. String字符串针对常量池的优化

    String对象是java语言中重要的数据类型,但是不是基本数据类型.相对于c语言的char java做了一些封装和延伸. 针对常量池的优化:当两个String拥有相同的值时,它们只引用常量池中的同一 ...

  10. 如何设置tomcat定时自动重启

    ,今天笔者就跟大家分享一下如何设置tomcat定时自动重启. 第一:把Tomcat6安装成windows 2003服务. 1.首先检查tomcat\bin目录下是否有service.bat文件,如图: ...