bash redmi गिरावट के साथ मामले स्विच करें?




रेडमी ी२ रोज गोल्ड (4)

मैं बैश (आदर्श केस-असंवेदनशील) में गिरावट के मामलों के साथ स्विच स्टेटमेंट के सही वाक्यविन्यास की तलाश में हूं। PHP में मैं इसे इस तरह प्रोग्राम करूंगा:

switch($c) {
    case 1:
        do_this();
        break;
     case 2:
     case 3:
        do_what_you_are_supposed_to_do();
        break;
     default:
        do_nothing(); 
}

मैं बैश में वही चाहता हूं:

case "$C" in
    "1")
        do_this()
        ;;
    "2")
    "3")
        do_what_you_are_supposed_to_do()
        ;;
    *)
        do_nothing();
        ;; 
esac

यह किसी भी तरह से काम नहीं करता है: फ़ंक्शन do_what_you_are_supposed_to_do() को निकाल दिया जाना चाहिए जब $ C 2 या 3 हो।


यदि मान पूर्णांक हैं तो आप [2-3] उपयोग कर सकते हैं या आप निरंतर मूल्यों के लिए [5,7,8] उपयोग कर सकते हैं।

#!/bin/bash
while [ $# -gt 0 ];
do
    case $1 in
    1)
        echo "one"
        ;;
    [2-3])
        echo "two or three"
        ;;
    [4-6])
        echo "four to six"
        ;;
    [7,9])
        echo "seven or nine"
        ;;
    *)
        echo "others"
        ;;
    esac
    shift
done

यदि मान स्ट्रिंग हैं तो आप इसका उपयोग कर सकते हैं ।

#!/bin/bash
while [ $# -gt 0 ];
do
    case $1 in
    "one")
        echo "one"
        ;;
    "two" | "three")
        echo "two or three"
        ;;
    *)
        echo "others"
        ;;
    esac
    shift
done

  • जब तक आप उन्हें परिभाषित नहीं करना चाहते हैं तब तक फ़ैश नामों के पीछे () उपयोग न करें।
  • 2 या 3 मैच के मामले में [23] उपयोग करें
  • स्थैतिक स्ट्रिंग के मामलों को '' बजाय '' जोड़ा जाना चाहिए

यदि "" में संलग्न है, तो दुभाषिया (अनिवार्य रूप से) मेल खाने से पहले मूल्य में संभावित चर का विस्तार करने का प्रयास करता है।

case "$C" in
'1')
    do_this
    ;;
[23])
    do_what_you_are_supposed_to_do
    ;;
*)
    do_nothing
    ;;
esac

असंवेदनशील मिलान के मामले में, आप चरित्र वर्गों का उपयोग कर सकते हैं (जैसे [23] ):

case "$C" in

# will match C='Abra' and C='abra'
[Aa]'bra')
    do_mysterious_things
    ;;

# will match all letter cases at any char like `abra`, `ABRA` or `AbRa`
[Aa][Bb][Rr][Aa])
    do_wild_mysterious_things
    ;;

esac

लेकिन abra ने कभी भी हिट नहीं किया क्योंकि यह पहले मामले से मेल खाएगा।

यदि आवश्यक हो, तो आप छोड़ सकते हैं ;; पहले मामले में भी निम्नलिखित मामलों में मैचों के लिए परीक्षण जारी रखने के लिए। ( ;; esac करने के लिए कूदता है)


"या" के लिए लंबवत बार ( | ) का उपयोग करें।

case "$C" in
"1")
    do_this()
    ;;
"2" | "3")
    do_what_you_are_supposed_to_do()
    ;;
*)
    do_nothing()
    ;;
esac

इसे इस्तेमाल करे:

case $VAR in
normal)
    echo "This doesn't do fallthrough"
    ;;
special)
    echo -n "This does "
    ;&
fallthrough)
    echo "fall-through"
    ;;
esac




bash