shell编程lesson08

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

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

你可能感兴趣的:(linux,bash,linux,运维,服务器,centos)