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

감사해요하우크라그팁을 주세요.

관련 정보