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. BZOJ 1711: [Usaco2007 Open]Dining吃饭

    1711: [Usaco2007 Open]Dining吃饭 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 902  Solved: 476[Submit ...

  2. Beta版本冲刺第一天

    Aruba 408 409 410 428 429 431 完成任务: 瀑布流方块长按删除提示 实现获取剪贴板内容并保存到数据库 常驻通知栏模块界面实现,设置按钮并预留intent 立会照片: 燃尽图 ...

  3. springMVC的bean注入方式

    POJO是多例模式,并不是单例模式. servlet是单例的,同一个实例可以同时有多个用户访问 用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存:用多例,是为了防止并发问题:单 ...

  4. django 关于html、css、js 目录位置

    项目目录: project/ ---------------init.py ---------------views.py ---------------settings.py ----------- ...

  5. iTunes Connect 显示可供销售,但是AppStore 就是不显示新版本(异于往常版本更新)

    这次版本更新,从上传到审核通过不足8小时.由于是手动发布,第二天早上上班发布了新版本.但是不同于往常,这次等了很久也不见AppStore 更新新版本.检查一下iTunes Connect ,显示可供销 ...

  6. yii2 可逆加密

    加密: $data 是你要加密的内容, $secretKey 是你自己设置的salt, $encryptedData = Yii::$app->getSecurity()->encrypt ...

  7. 顶级域名和二级域名cookie共享删除和修改

    原文地址: https://segmentfault.com/a/1190000006932934

  8. MySQL主从复制、半同步复制和主主复制概述

    http://www.cnblogs.com/zping/p/5275531.html

  9. volatile关键字 学习记录2

    public class VolatileTest2 implements Runnable{ volatile int resource = 0; public static void main(S ...

  10. 在本地调试移动设备上的页面——神器weinre介绍

    平时写代码,最喜欢用chrome的developer Tool调试页面了,基本是离不了的工具.但是当页面需要在移动设备上使用,尤其是被嵌入到Hybird APP中时,由于移动版的chrome没有dev ...