bash编程之case语句

一、语法格式

case 变量引用(${}) in

value1)    #变量的值是value1,则执语句1,语句2,······

语句1

语句2

······

;;    #每个分支结束时都需要以双分号结尾

value2)    #变量的值是value2,则执语句3,语句4,······

语句3

语句4

······

;;

value3)    #变量的值是value3,则执语句5,语句6,······

语句5

语句6

······

;;

*)    #其他任意情况,则执行语句7,语句8,······;支持字符通配globbing,*为任意长度的任意字符;支持star|Star)这类格式;不支持正则表达式

语句7

语句8

······

;;

esac    #语句以esac结束

二、练习

示例1:写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录归档备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间

#!/bin/bash
# Date: 2015-04-12
# Description:
# Version: 1.0
if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代
    mkdir /backup
fi
Command=$1
if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip
    Command=gzip
fi
if [ $Command == gzip ];then
    tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"
elif [ $Command == bzip2 ];then
    tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"
elif [ $Command == xz ];then
    tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(xz)"
else
    echo "Usage:`basename $0`{gzip | bzip2 | xz }."
    exit 5
fi

练习1:用case语句完成示例1要求

脚本1:

#!/bin/bash
# Date: 2015-04-12
# Description:
# Version: 1.0
if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代
    mkdir /backup
fi
Command=$1
if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip
    Command=gzip
case $Command in
gzip)
    tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"
    ;;
bzip2)
    tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"
    ;;
xz)
    tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/
    [ $? -eq 0 ] && echo "Backup etc successfully.(xz)"
    ;;
*)
    echo "Usage:`basename $0`{gzip | bzip2 | xz }."
    exit 5
    ;;
esac

脚本2:

#!/bin/bash
# Date: 2015-04-12
# Description:
# Version: 1.0
if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代
    mkdir /backup
fi
Command=$1
if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip
    Command=gzip
fi
case $Command in
gzip)
    tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/
    Ret=$?
    ;;
bzip2)
    tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/
    Ret=$?
    ;;
xz)
    tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/
    Ret=$?
    ;;
*)
    echo "Usage:`basename $0`{gzip | bzip2 | xz }."
    exit 5
    ;;
esac

    [ $Ret -eq 0 ] && echo "Backup etc successfully.($Command)"    #通过每个循环分支的返回值

示例2:写一个脚本:可以接受一个参数,其使用形式如下:
script.sh {start|stop|restart|status}
如果参数为start,创建空文件/var/lock/subsys/script,并显示“Starting script successfully.”;
如果参数为stop,则删除文件/var/lock/subsys/script,并显示“Stop script finished.”;
如果参数为restart,则删除文件/var/lock/subsys/script后重新创建,并显示“Restarting script successfully.”;
如果参数为status,那么:
    如果/var/lock/subsys/script文件存在,则显示为“script is running.”
    否则,则显示为“script is stopped.”
其它任何参数:则显示“script.sh {start|stop|restart|status}”

#!/bin/bash
# Date: 2015-04-13
# Author: ArvinLau
# Description: 
# Version: 1.0
FileName=`basename $0`
FilePath="/var/lock/subsys/$FileName"    #变量替换,使用双引号
if [ $# -lt 1 ]; then
    echo "Usage:$0 {start | restart | stop | status}"
    exit 5
fi
if [ $1 == start ]; then
    touch $FilePath
    echo "Starting $FileName successfully."
elif [ $1 == stop ]; then
    rm -f $FilePath
    echo "Stop script finished."
elif [ $1 == restart ]; then
    rm -f $FilePath
    touch $FilePath
    echo "Restarting script successfully."
elif [ $1 == status ]; then
    if [ -e $FilePath ]; then
        echo "Script is running."
    elif [ ! -e $FilePath ]; then
        echo "Script is stopped."
    fi
else
    echo "Usage:$0 {start | restart | stop | status}"
    exit 7
fi

练习2:用case语句完成示例2的要求

#!/bin/bash
# Date: 2015-04-13
# Author: ArvinLau
# Description: 
# Version: 1.0
FileName=`basename $0`
FilePath="/var/lock/subsys/$FileName"    #变量替换,使用双引号
if [ $# -lt 1 ]; then
    echo "Usage:$0 {start | restart | stop | status}"
    exit 5
fi
case $1 in
start)
    touch $FilePath
    echo "Starting $FileName successfully." ;;
stop)
    rm -f $FilePath &> /dev/null
    echo "Stop script finished." ;;
restart)
    rm -f $FilePath &> /dev/null
    touch $FilePath
    echo "Restarting script successfully." ;;
status)
    if [ -e $FilePath ]; then
        echo "Script is running."
    else
        echo "Script is stopped."
    fi
*)
    echo "Usage:$0 {start | restart | stop | status}"
    exit 7 ;;
esac

练习3:判断当前Linux发行版是RedHat,Fedora,CentOS还是其他,

方法:取得/etc/issue文件第一行的第一个单词后进行比较

#!/bin/bash
# Date: 2015-04-13
# Author: ArvinLau
# Description: 
# Version: 1.0
Name=`head -1 /etc/issue | cut -d‘ ‘ -f1`
case $Name in
CentOS)
    echo "The system is $Name." ;;
Fedora)
    echo "The system is $Name." ;;
RedHat)
    echo "The system is $Name." ;;
*)
    echo "The system is $Name or Unknown system."
    ;;
esac
时间: 2024-10-20 22:21:39

bash编程之case语句的相关文章

bash脚本编程之case语句

case语句用于简化复杂的if语句 #!/bin/bash while true; do   read -p "Enter your score:" score   if [ "$score" == "quit" ]; then           exit 0   elif [ $score -lt 60 ]; then           echo "stupid"           break   elif [[ $s

bash脚本编程之case语句及脚本选项进阶

case语句及脚本选项进阶详解     面向过程程序设计语言中的控制流(即程序当中的语句)默认是顺序执行的. 程序设计语言的控制结构一共有三类: 1,顺序结构 2,选择结构 (1)if语句 ->单分支的if语句 格式:if condition1;then expression ... fi ->双分支的if语句 格式:if condition1;then expression ... else expression ... fi ->多分支的if语句 格式:if condition1;t

shell编程之case语句

bash脚本编程: case语句: 多分支if语句: if CONDITION1; then 分支1 elif  CONDITION2; then 分支2 ... else CONDITION; then 分支n fi 示例1:显示一个菜单给用户: cpu) display cpu information mem) display memory information disk) display disks information quit) quit 要求:(1) 提示用户给出自己的选择: (

编程之case语句

一.使用$random变量随机取10个随机数,进行最大值和最小值对比 #!/bin/bash # declare -i MAX=0 for I in {1..10};do    MYRANDOM=$RANDOM    [ $I -eq 1 ] && MIN=$MYRANDOM;    if [ $I -le 9 ];then         echo -n "$MYRANDOM,"    else         echo  "$MYRANDOM"

Shell编程之case语句与循环语句

case语句分支 1.case语句的结构 case 变量值 in模式 1)命令序列 1;;模式 2)命令序列 2;;......*)默认命令序列esac case分支语句的结构图使用case分支语句的注意点:1.case行尾必须为单词"in",每一个模式必须以右括号")"结束.2.双分号";;"表示命令序列的结束.3.模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以用竖杠符号"|"表示

shell编程之case分支语句

shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 如果里面匹配到固定值:或某个变量存在多中取值,需要对其中的每一个取值分别执行不同的命令序列. case只是判断一个变量的不同取值. case的模式: 执行流程: 首先使用"变量值"与模式1进行比较,如果取值相同就执行模式1的命令序列1,直到遇见" ;; "后跳转到es

bash编程之:case语句、read与用户交互

日期: 2015年09月13日 case语句 case语句:该语句和if并无太大差别,主要作用是使代码的逻辑结构更清晰. case语句可以称为是:简洁版的多分支if语句 使用场景:判断某变量的值是否为多种情形中的一种时使用 case语句的用法格式为: case $VARIALBE in PATTERN1) 分支1 ;;     <================注意:这两个分号不要忘记写,否则语法错误 PATTERN2) 分支2 ;;     <================注意:这两个分号

Shell编程之case多分支语句、循环语句(for、while等)、Shell函数、Shell数组

case多分支语句 case语句的结构: 针对变量的不同取值,分别执行不同的命令列 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; ..... *) 默认命令序列 esac 示例: 字符类型识别: 提示用户输入一个字符: 判断出该字符是字母.数字或者其他字符. 脚本如下: [[email protected] opt]# vim test01.sh #!/bin/bash read -p "请输入一个字符:" key case $key in [a-z]

bash编程 :if,case语句

bash之条件判断(选择执行) 单分支if语句: if CONDITION; then if-true-分支 fi 示例:写一个脚本,如果文件不存在,就创建文件 #!/bin/bash # file=/root/fstab   if [ ! -f $file ]; then   touch $file fi 双分支if语句: if CONDITION; then if-true-分支 else if-true-分支 fi 示例:写一个脚本,如果文件不存在,就说文件不存在,并创建文件 #!/bin