bash 중첩 대소 문자 구문 및 ;; 터미네이터


14

;;중첩 된을 포함하는이 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

내가 화를 낸 이후 몇 년이 지났다.

답변:


36

에 적절한 들여 쓰기를 사용하면 추적하기가 더 쉽습니다 ;;.

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 에게 감사합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.