বাশ নেস্টেড কেস সিনট্যাক্স এবং ;; terminators


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

টিপটির জন্য হউক লেজিংকে ধন্যবাদ ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.