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

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

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

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

我已经好几年没有愤怒地进行过任何攻击了。

答案1

如果您在 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

答案2

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

假设 $3 是一个字符串。

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

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

shopt -s extglob

谢谢豪克拉格给小费。

相关内容