কম্পিউটার টিউটোরিয়াল

ব্যাশ কেইস স্টেটমেন্ট মাস্টার করুন: কার্যকর স্ক্রিপ্টিংয়ের জন্য ৫টি প্র্যাক্টিক্যাল উদাহরণ

ব্যাশ কেইস স্টেটমেন্ট মাস্টার করুন: কার্যকর স্ক্রিপ্টিংয়ের জন্য ৫টি প্র্যাক্টিক্যাল উদাহরণব্যাশ শেল কেইস স্টেটমেন্ট সি-র স্যুইচ স্টেটমেন্টের মতো। এটি সিম্পল ভ্যালু যেমন ইন্টিজার এবং ক্যারেক্টার টেস্ট করতে ব্যবহৃত হয়।

কেইস স্টেটমেন্ট একটি লুপ নয়, এটি n সংখ্যক বার কোড ব্লক এক্সিকিউট করে না। বরং, ব্যাশ শেল কন্ডিশন চেক করে, এবং প্রোগ্রামের ফ্লো কন্ট্রোল করে।

এই আর্টিকেলে আমরা ৫টি প্র্যাক্টিক্যাল উদাহরণের সাথে ব্যাশ কেইস কমান্ড রিভিউ করব।

ব্যাশ শেলে কেইস কনস্ট্রাক্ট আমাদের স্ট্রিংগুলোকে প্যাটার্নের সাথে টেস্ট করতে দেয় যাতে ওই প্যাটার্নে 와াইল্ডকার্ড ক্যারেক্টার থাকতে পারে। ব্যাশ কেইস স্টেটমেন্ট হলো ব্যাশ if-then-else স্টেটমেন্টের সিম্পলেস্ট ফর্ম।

ব্যাশ কেইস স্টেটমেন্টের সিনট্যাক্স।

case expression in pattern1 ) statements ;; pattern2 ) statements ;; ... esac 

ব্যাশ কেইস স্টেটমেন্টের মূল পয়েন্টগুলো:

  • কেইস স্টেটমেন্ট প্রথমে এক্সপ্রেশনটি এক্সপ্যান্ড করে এবং প্রতিটি প্যাটার্নের সাথে ম্যাচ করার চেষ্টা করে।
  • যখন ম্যাচ পাওয়া যায়, ডাবল সেমিকোলন (;;) পর্যন্ত সকল सम्बद्ध স্টেটমেন্ট এক্সিকিউট হয়।
  • প্রথম ম্যাচ পাওয়ার পর, কেইস টার্মিনেট হয় শেষ এক্সিকিউট করা কমান্ডের এক্সিট স্ট্যাটাস দিয়ে।
  • যদি কোনো ম্যাচ না পাওয়া যায়, কেইসের এক্সিট স্ট্যাটাস শূন্য।

ব্যাশ কেইস উদাহরণ ১. একটি প্রসেসে সিগন্যাল পাঠানো

নিচের স্ক্রিপ্টটি সিগন্যাল নম্বর এবং প্রসেস আইডি আর্গুমেন্ট হিসেবে নেয়, এবং সিগন্যাল নেম ব্যবহার করে দিয়ে गये প্রসেস আইডিতে সিগন্যাল পাঠায়।

এই স্ক্রিপ্টটি কেইস স্টেটমেন্টের ব্যবহার ডেমো করার জন্য।

$ cat signal.sh #!/bin/bash if [ $# -lt 2 ] then echo "Usage : $0 Signalnumber PID" exit fi case "$1" in 1) echo "Sending SIGHUP signal" kill -SIGHUP $2 ;; 2) echo "Sending SIGINT signal" kill -SIGINT $2 ;; 3) echo "Sending SIGQUIT signal" kill -SIGQUIT $2 ;; 9) echo "Sending SIGKILL signal" kill -SIGKILL $2 ;; *) echo "Signal number $1 is not processed" ;; esac 

উপরোক্ত উদাহরণে:

  • $1 এবং $2 হলো যথাক্রমে সিগন্যাল নম্বর এবং প্রসেস আইডি।
  • kill কমান্ড ব্যবহার করে, এটি দিয়ে गये প্রসেস আইডিতে সংশ্লিষ্ট সিগন্যাল পাঠায়।
  • এটি স্লিপ কমান্ডকে কিছু সেকেন্ড এক্সিকিউট করে।
  • অপশনাল লাস্ট কম্পারিজন *) হলো ডিফল্ট কেইস এবং এটি যেকোনো কিছু ম্যাচ করে।

উপরোক্ত শেল স্ক্রিপ্টের ব্যবহার: sleep কমান্ডের প্রসেস আইডি বের করুন এবং সেই প্রসেস আইডিতে কিল সিগন্যাল পাঠিয়ে প্রসেসটি কিল করুন।

$ sleep 1000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signal.sh 9 23277 Sending SIGKILL signal $ sleep 1000 Killed 

আরও পড়ুন আমাদের পূর্বের কিল আর্টিকেল – 4 methods to kill a process।

ব্যাশ কেইস উদাহরণ ২. একটি ফাইলে প্যাটার্ন ম্যাচ

এই উদাহরণটি ম্যাচ করা প্যাটার্নের লাইন সংখ্যা, ওয়ার্ড সংখ্যা প্রিন্ট করে এবং ম্যাচ করা লাইনগুলো ডিলিট করে।

$ cat fileop.sh #!/bin/bash # ৩টি আর্গুমেন্ট দেওয়া হয়েছে কিনা চেক # if [ $# -lt 3 ] then echo "Usage : $0 option pattern filename" exit fi # দেওয়া ফাইল এক্সিস্ট করে কিনা চেক # if [ ! -f $3 ] then echo "Filename given \"$3\" doesn't exist" exit fi case "$1" in # প্যাটার্ন ম্যাচ করা লাইন সংখ্যা কাউন্ট -i) echo "Number of lines matches with the pattern $2 :" grep -c -i $2 $3 ;; # প্যাটার্ন ম্যাচ করা ওয়ার্ড সংখ্যা কাউন্ট -c) echo "Number of words matches with the pattern $2 :" grep -o -i $2 $3 | wc -l ;; # ম্যাচ করা সব লাইন প্রিন্ট -p) echo "Lines matches with the pattern $2 :" grep -i $2 $3 ;; # প্যাটার্ন ম্যাচ করা সব লাইন ডিলিট -d) echo "After deleting the lines matches with the pattern $2 :" sed -n "/$2/!p" $3 ;; *) echo "Invalid option" ;; esac 

উপরোক্ত স্ক্রিপ্টের এক্সিকিউশন নিচে দেখানো হলো।

$ cat text Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer. The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code. Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms. It is the most popular editor amongst Linux Journal readers. 

Bash case regex আউটপুট। Vim প্যাটার্ন ম্যাচ করা লাইন ডিলিট করার পর:

$ ./fileop.sh -d Vim text It is the most popular editor amongst Linux Journal readers. 

আরও পড়ুন আমাদের পূর্বের আর্টিকেলটি Bash ~ expansion and { } expansion।

ব্যাশ কেইস উদাহরণ ৩. এক্সটেনশন থেকে ফাইল টাইপ বের করা

এই উদাহরণটি ফাইলের এক্সটেনশন ভিত্তিক্যে ফাইল টাইপ (টেক্সট, সি সোর্স, ইত্যাদি) প্রিন্ট করে।

$ cat filetype.sh #!/bin/bash for filename in $(ls) do # ফাইলে উপলব্ধ এক্সটেনশন নেওয়া ext=${filename##*\.} case "$ext" in c) echo "$filename : C source file" ;; o) echo "$filename : Object file" ;; sh) echo "$filename : Shell script" ;; txt) echo "$filename : Text file" ;; *) echo " $filename : Not processed" ;; esac done $ ./filetype.sh a.c : C source file b.c : C source file c1.txt : Text file fileop.sh : Shell script obj.o : Object file text : Not processed t.o : Object file 

ব্যাশ কেইস উদাহরণ ৪. ইউজারকে Yes বা No দিয়ে প্রম্পট করা

অনেক সফ্টওয়ার ইনস্টলেশনে, লাইসেন্স এগ্রিমেন্টের সময়, ইউজার থেকে yes বা no ইনপুট নেওয়া হয়। নিচের কোড স্নিপেটটি ইউজার থেকে yes বা no ইনপুট নেওয়ার একটি উপায়।

$ cat yorno.sh #!/bin/bash echo -n "Do you agree with this? [yes or no]: " read yno case $yno in [yY] | [yY][Ee][Ss] ) echo "Agreed" ;; [nN] | [n|N][O|o] ) echo "Not agreed, you can't proceed the installation"; exit 1 ;; *) echo "Invalid input" ;; esac $ ./yorno.sh Do you agree with this? [yes or no]: YES Agreed 

যদি পাইপ ক্যারেক্টার দিয়ে পৃথক হয়ে বেশ কিছু প্যাটার্ন থাকে, এক্সপ্রেশনটি যেকোনো একটি ম্যাচ করলে সংশ্লিষ্ট স্টেটমেন্টগুলো রান হবে। প্যাটার্নগুলো ক্রম অনুযায়ী চেক হয় যতক্ষণ না ম্যাচ পাওয়া যায়; যদি কোথাও ম্যাচ না পাওয়া যায়, তাহলে কিছুই হয় না।

আরও পড়ুন আমাদের পূর্বের 15 bash array examples আর্টিকেলটি।

ব্যাশ কেইস উদাহরণ ৫. স্টার্ট-আপ স্ক্রিপ্ট

/etc/init.d ডিরেক্টরিতে স্টার্ট-আপ স্ক্রিপ্টগুলো কেইস স্টেটমেন্ট ব্যবহার করে অ্যাপ্লিকেশন স্টার্ট এবং স্টপ করে।

আপনি যেকোনো ধরনের প্যাটার্ন ব্যবহার করতে পারেন, কিন্তু প্রিমিটিভ ভ্যালু (যেমন ইন্টিজার বা ক্যারেক্টার) টেস্ট করার সময় কেইস স্টেটমেন্ট ব্যবহার করা সবসময় রিকমেন্ডেড।

$ cat startpcapp #!/bin/bash case "$1" in 'start') echo "Starting application" /usr/bin/startpc ;; 'stop') echo "Stopping application" /usr/bin/stoppc ;; 'restart') echo "Usage: $0 [start|stop]" ;; esac $ ./startpcapp start Starting application /usr/bin/startpc started 

পরামর্শিত পড়াশোনা

ব্যাশ কেইস স্টেটমেন্ট মাস্টার করুন: কার্যকর স্ক্রিপ্টিংয়ের জন্য ৫টি প্র্যাক্টিক্যাল উদাহরণBash 101 Hacks, by Ramesh Natarajan। আমার অধিকাংশ সময় লিনাক্স এনভায়রনমেন্টে কাটে। তাই স্বাভাবিকভাবেই আমি ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের বড় ফ্যান। ১৫ বছর আগে, যখন আমি *nix-এর বিভিন্ন ফ্লেভরে কাজ করতাম, তখন সি শেল এবং কোর্ণ শেলে অনেক কোড লিখতাম। পরে, যখন লিনাক্সে সিস্টেম অ্যাডমিনিস্ট্রেটর হিসেবে কাজ শুরু করলাম, প্রায় সব টাস্ক ব্যাশ শেল স্ক্রিপ্টিং দিয়ে অটোমেট করলাম। আমার ব্যাশ অভিজ্ঞতার ভিত্তিতে, আমি Bash 101 Hacks ইবুক লিখেছি যাতে ১০১টি প্র্যাক্টিক্যাল উদাহরণ আছে ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং-এ। যদি আপনি ব্যাশ মাস্টার করার কথা ভাবছেন, তো নিজের উপকারে এই বইটি পড়ুন, যা আপনাকে আপনার ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং নিয়ন্ত্রণে সাহায্য করবে।


  1. C++-এ সিদ্ধান্ত গ্রহণের কাঠামো: if-else এবং switch-case

  2. rbash: রেস্ট্রিক্টেড Bash শেল মাস্টার করুন – কনসেপ্ট, ব্যবহার, এবং প্র্যাক্টিক্যাল উদাহরণ

  3. ব্যাশ কন্ডিশনাল স্টেটমেন্ট মাস্টার করুন: ৪টি প্র্যাক্টিক্যাল If উদাহরণ

  4. ব্যাশ অ্যারে মাস্টার করুন: ১৫টি প্র্যাক্টিক্যাল উদাহরণ ও কমপ্রيهেনসিভ টিউটোরিয়াল