Daffodil International University

Career Development Centre (CDC) => Career Guidance => Academia Lecture Series => Topic started by: sanzid.swe on March 03, 2020, 11:22:05 AM

Title: বাংলায় শেল স্ক্রিপ্টিং- পর্ব ৬ [কন্ডিশনাল সুইচ কেইস]
Post by: sanzid.swe on March 03, 2020, 11:22:05 AM
আমি আগের পর্বে মাল্টিপল কন্ডিশনাল লজিক নিয়ে লিখেছি। এবার অনেকগুলো কন্ডিশন থাকলে সেখানে elif  ব্যবহার না করে সুইস কেইস এর মাধ্যমে কিভাবে খুবই সহজে, একই কাজটি সেরে ফেলতে পারবো সেটি বুঝানোর চেষ্টা করবো।

সুইস কেইস বলতে সেখানে কোন একটি কন্ডিশনের আন্ডারে অনেকগুলো এক্সিকিউশন কেইস থাকবে, এরপর যে কেইসটি কন্ডিশন অনুযায়ী সত্য হবে শুধুমাত্র সেই কেইসটিই এক্সিকিউট হবে। এবার নিচের কোডটি লক্ষ্য করুন-

echo "Is it raining?"
read ans

case $ans in
    yes|y) echo "Yes, raining!";;
    no|n) echo "No,not raining!";;
    *) echo "Invalid input!"
esac
1
2
3
4
5
6
7
8
echo "Is it raining?"
read ans
 
case $ans in
    yes|y) echo "Yes, raining!";;
    no|n) echo "No,not raining!";;
    *) echo "Invalid input!"
esac
এখানে অনেকগুলো ব্যাপার বুঝতে হবে, একটু চেষ্টা করলে এটার বস হয়ে যাওয়া কোন ব্যাপার নাহ!

প্রথমে একটা লাইন প্রিন্ট দেখিয়ে ans নামের একটা ভেরিয়েবল ইনপুট নিয়েছি, যেখানে এখন বৃষ্টি হচ্ছে কিনা সেটা হ্যা অথবা না ইনপুট নিবে।
চতুর্থ লাইনে এসে case নামে একটা কী-ওয়ার্ড নিয়েছি যেটা কেইস নিয়ে কাজ করার জন্য নেয়া অবধারিত। এরপর আমরা যে ভেরিয়েবলের মধ্য থেকে এনসার হ্যা অথবা না নিয়ে কাজ করবো সেটি লিখে স্পেস দিয়ে in নামের আরেকটি -কী-ওয়ার্ড লিখবো এবং এর পর থেকে কেইসগুলো লেখা শুরু করবো।
আমি এখানে তিনটি কেইস নিয়ে কাজ করেছি… yes, no এবং অন্য যেকোনকিছু- (বিঃ দ্রঃ শেষের কেইস বাদে প্রতিটা কেইসের শেষে দুইটা কোলন ( ;; ) দিতে ভুলবেন না)
একজন ইনপুট দেয়ার সময় yes অথবা শর্টকাটে y, যেকোন একটি দিতে পারে। সেজন্য yes|y, অর্থাৎ দুইটার মধ্যে অথবা বুঝানোর জন্য “|” চিহ্নটি ব্যবহার করা হয়ে থাকে। এটি লেখার পর একটি প্রথম বন্ধনী দ্বারা কন্ডিশনটিকে আটকে দিতে হয় এবং এর পরের অংশ হল বডি, অর্থাৎ কন্ডিশনটি সত্য হলে যে অংশ এক্সিকিউট হবে।
একইভাবে no এর জন্য no|n লিখেছি এবং বাকীটা আগের মতো।
এরপর আমরা কন্ডিশন হিসেবে “*” নিয়েছি, এর অর্থ মুলত বাকী সবকিছু। যারা এসকিউএল ডেটাবেইস করেছেন, বুঝবেন কোনকিছুর আগে একটা স্টারিক সিম্বল দিলে বুঝায় ALL… এখানেও প্রায় তাই। অর্থাৎ যেগুলো আগের কেইসের মধ্যে আসছে সেগুলো বাদে অন্যকিছু ইনপুট হিসেবে নিলেই এটার বডি এক্সিকিউট হবে।
সবশেষে esac হল case কী-ওয়ার্ডের ফিনিশিং কী-ওয়ার্ড, যেটি এক্স্যাক্ট case এর রিভার্স (খেয়াল করে দেখুন)।
এবার নিচের কোডটি লক্ষ্য করুন-

Shell
echo "Enter a number between 1 and 5"
read n
case $n in
 5) echo "Five!";;
 4) echo "Four!";;
 3) echo "Three!";;
 2) echo "Two!";;
 1) echo "One!"
 *) echo "Not valid!"
esac
1
2
3
4
5
6
7
8
9
10
echo "Enter a number between 1 and 5"
read n
case $n in
 5) echo "Five!";;
 4) echo "Four!";;
 3) echo "Three!";;
 2) echo "Two!";;
 1) echo "One!"
 *) echo "Not valid!"
esac


আমার ব্লগের মূল লেখা- https://bit.ly/2TBsMsN