shell编程 - case分支

case分支

case的语法结构:

case word in
    [pattern [| pattern]...) commands ;;]...
esac

之前的菜单驱动程序用case可以简化为

#!/bin/bash

# case-menu: a menu driven system information program

clear

echo "

Please Select:
1.Display System Information
2.Display Disk Space
3.Display Home Space Utilization
0.Quit
"
read -p "Enter selection [0-3] > "

case $REPLY in
    0)    echo "Program terminated."
          exit
          ;;
    1)    echo "Hostname: $HOSTNAME"
          uptime
          ;;
    2)    df -h
          ;;
    3)    if [[ $(id -u) -eq 0 ]];then
                echo "Home Space Utilization(All Users)"
                du -sh /home/*
          else
                echo "Home Space Utilization($USER)"
                du -sh $HOME
          fi
          ;;
    *)    echo "Invalid entry" >&2
          exit 1
          ;;
esac

模式

同路径名展开一样,case使用以“)”字符结尾的模式进行匹配。

case模式范例

模式描述
a)若关键字为a则吻合
[[:alpha:]])若关键字为单个字母则吻合
???)若关键字为3个字符则吻合
*.txt)若关键字以.txt结尾则吻合
*)与任何关键字吻合。在case命令的最后的一个模式应用此项是个不错的选择,可对应所有前模式不吻合的关键字,也就是对应任何可能的无效值
#!/bin/bash

read -p "enter word > "

case $REPLY in
    [[:alpha:]])    echo "is a single alphabetic character." ;;
    [ABC][0-9])    echo "is A, B, or C followed by a digit." ;;
    ???)    echo "is three characters long." ;;
    *.txt)    echo "is a word ending in '.txt'" ;;
    *)    echo "is something else." ;;
esac

多个模式的组合

        我们也可以用竖线作为分隔符来组合多个模式,模式之间是“或”的关系。

这对一些类似同时处理大写和小写字母的场景十分有用!!!

#!/bin/bash

# case-menu:a menu driven system information program

clear

echo "
Please Select:
A.Display System Information
B.Display Disk Space
C.Display Home Space Utilization
Q.Quit
"

read - p "Enter selection [A, B, C or Q] > "

case $REPLY in
    q|Q)    echo "Program terminated."
            exit
            ;;
    a|A)    echo "Hostname: $HOSTNAME"
            uptime
            ;;
    b|B)    df -h
            ;;
    c|C)    if [[ $(id -u) -eq 0 ]];then
                echo "Home Space Utilization(All Users)"
                du -sh /home/*
            else
                echo "Home Space Utilization($USER)"
                du -sh $HOME
            fi
            ;;
    *)    echo "Invalid entry" >&2
          exit 1          
          ;;
esac

        以上脚本通过字母而不是数字进行菜单选择。通过|组合模式,用户可以使用大写字母或者小写字母进行菜单选择,即对用户来说,不需要考虑输入字母的大小写。


可以关注作者微信公众号,追踪更多有价值的内容!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值