bash嵌套的大小写语法和;; 终结者


14

;;在包含嵌套case的bash脚本中,我是否有足够(或可能太多)的终止符?

case "$1" in
OK)
    # Nothing needs done
    echo -n "OK:1" ;;

CRITICAL)

    case "$2" in
    SOFT)
        case "$3" in
        1|2) 
            soft_reset_pool.sh ;;
        esac ;;

    HARD)
        case "$3" in
        1|2)
            hard_reset_pool.sh ;;

        3|4)
            hard_reset_service ;;

        esac ;;
    esac ;;      
esac

自从我大发脾气以来已经有几年了。

Answers:


36

如果在;;s 上使用明智的缩进,则更容易跟踪。

case "$1" in
OK)
    # Nothing needs done
    echo -n "OK:1"
    ;;

CRITICAL)

    case "$2" in
    SOFT)
        case "$3" in
        1|2) 
            soft_reset_pool.sh
            ;;
        esac
        ;;

    HARD)
        case "$3" in
        1|2)
            hard_reset_pool.sh
            ;;

        3|4)
            hard_reset_service
            ;;

        esac
        ;;
    esac
    ;;
esac

他们匹配得很好,每个case 标签)都有一个终止;;

话虽如此,有时将所有内容折叠成非嵌套的更容易和/或更清晰case

case "$1:$2:$3" in

OK:*)
    # Nothing needs done
    echo -n "OK:1"
    ;;

CRITICAL:SOFT:[12])
    soft_reset_pool.sh
    ;;

CRITICAL:HARD:[12])
    hard_reset_pool.sh
    ;;

CRITICAL:HARD:[34])
    hard_reset_service
    ;;

esac

1

如果您必须处理多个模式字符串:

假设$ 3是一个字符串。

...
CRITICAL:HARD:@("A"|"B"|"C"))
...

在Bash中,您需要在脚本上添加以下内容:

shopt -s extglob

感谢Hauke Laging提供的小费。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.