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(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...
随机推荐
- <form:select>的使用
最近在学习springMVC,用到了<form:select>标签,使用发过程中遇到了些问题,现在记录下,以防忘记. 我jsp页面是这样的: <%@ page language=&q ...
- SqlServer中使用正则表达式
一.查看配置,如果‘show advanced options’,‘Ole Automation Procedures’,‘Ad Hoc Distributed Queries’的config_val ...
- JDBC判断数据库是否插入成功
package com.xujianyou; import java.sql.*; public class TestConnect { public static void main(String ...
- 内存VSS/RSS/PSS/USS名词解释
VSS(virtual set size)虚拟耗用内存(包含共享库占用的内存) RSS(Resident set size)实际使用物理内存(包含共享库占用的内存) RSS是进程实际驻存在物理内存的部 ...
- HTML5学习总结-番外03 Angular Ionic
一 Angular Angular使用了MVVC设计模式,MVVC在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把mode ...
- js 闭包
this.color = "blue"; (function(_this) { setInterval(function() { if (_this.color !== " ...
- Html中自定义鼠标的形状
Html中自定义鼠标的形状 <html> <head> <title>自定义的鼠标形状</title> <meta http-equiv=&quo ...
- Java之使用Hadoop探索大数据的世界
什么是大数据 PB = 1024tb 7123913827189tb Reids 无共享 HDFS 优点 :特别适合存储大型文件 TFS hdfs 架构 NameNode: 整个hadoop总管,只有 ...
- express源码剖析1
在通读源码之前,先把一些比较难理解的代码吃透: 1.EventEmitter.prototype mixin(app, EventEmitter.prototype, false); app为一个函数 ...
- Python之路【第二十三篇】爬虫
difference between urllib and urllib2 自己翻译的装逼必备 What is the difference between urllib and urllib2 mo ...