बैश नेस्टेड केस सिंटैक्स और; टर्मिनेटर्स


14

क्या मुझे ;;इस बैश स्क्रिप्ट में नेस्टेड के साथ पर्याप्त (या शायद बहुत अधिक) टर्मिनेटर मिले हैं 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"))
...

बैश में आपको स्क्रिप्ट पर निम्नलिखित जोड़ना होगा:

shopt -s extglob

टिप के लिए Hauke ​​Laging को धन्यवाद ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.