case
है केवल पैटर्न मिलान के लिए, यह गणित मूल्यांकन नहीं करेंगे (शायद सिवाय अगर आप समझते हैं zsh
की <x-y>
विस्तारित पैटर्न मिलान ऑपरेटर)। [...]
केवल मैच के लिए है एक चरित्र (या क्रमवार तत्व के भीतर निर्दिष्ट सेट के आधार पर कुछ कार्यान्वयन में)। तो उदाहरण के लिए [0-80]
मेल खाने वाली एक चरित्र अगर यह में से एक है 0
करने के लिए 8
या 0
(यह है कि, में से एक 0, 1, 2, 3, 4, 5, 6, 7, 8)।
आप पैटर्न के साथ संख्याओं का मिलान कर सकते हैं जैसे:
case $(($number)) in
([0-9]|[1-7][0-9]|80) echo ">=0<=80";;
(8[1-9]|9[0-9]|100) echo ">=81<=100";;
... and so on
esac
लेकिन आप आसानी से देख सकते हैं कि यह सही उपकरण नहीं है।
[...]
से मेल खाता है एक , निर्दिष्ट अक्षरों की सूची के खिलाफ चरित्र तो [121-300]
किसी भी चरित्र या तो 1, 2, 1 से 3, 0 या 0 है कि, तो यह रूप में एक ही है के लिए मैच [0-3]
या [0123]
।
उपयोग:
if [ "$number" -ge 0 ] && [ "$number" -le 80 ]; then
echo ">=0<=80"
elif [ "$number" -ge 81 ] && [ "$number" -le 100 ]; then
echo ">=81<=100"
elif ... and so on
...
fi
उपयोग करने का एक और तरीका case
होगा:
case $((
(number >= 0 && number <= 80) * 1 +
(number > 80 && number <= 100) * 2 +
(number > 100 && number <= 120) * 3 +
(number > 120 && number <= 300) * 4)) in
(1) echo ">=0<=80";;
(2) echo ">=81<=100";;
(3) echo ">=101<=120";;
(4) echo ">=121<=300";;
(0) echo "None of the above";;
esac
या टर्नरी ऑपरेटर का उपयोग करें ( x ? y : z
):
case $((
number >= 0 && number <= 80 ? 1 :
number > 80 && number <= 100 ? 2 :
number > 100 && number <= 120 ? 3 :
number > 120 && number <= 300 ? 4 : 0)) in...
या @mikeserv की तरह, बॉक्स के बाहर सोचें, तर्क को उल्टा करें case
और 1
उन अंकगणितीय तुलनाओं के मूल्य के विरुद्ध मिलान करें ।
if [ n < 0 ] - elif [ n <= 80 ] - elif [ n <= 100 ] ... - else
। कम टाइपिंग, कम त्रुटि-प्रवण।