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

■適切なインデントを使用すると、追跡が簡単になります;;

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

ありがとうハウクラグヒントをください。

関連情報