case
এটি কেবলমাত্র প্যাটার্ন মিলের জন্য, এটি পাটিগণিত মূল্যায়ন করবে না (যদি আপনি zsh
এর <x-y>
বর্ধিত প্যাটার্ন মেলানো অপারেটর বিবেচনা করেন তবে) except [...]
শুধুমাত্র মেলে হয় এক চরিত্র (অথবা ক্রমানুসারে সাজানো উপাদান মধ্যে নিদিষ্ট সেট উপর ভিত্তি করে কিছু বাস্তবায়নের মধ্যে)। সুতরাং উদাহরণস্বরূপ [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...
অথবা @ মিমকিজারের মতো, বাক্সের বাইরে ভাবুন, যুক্তিটি বিপরীত করুন case
এবং1
সেইগুলি গণিতের তুলনার মানের সাথে মেলে ।
if [ n < 0 ] - elif [ n <= 80 ] - elif [ n <= 100 ] ... - else
। কম টাইপিং, ত্রুটি-প্রবণতা কম।