ব্যাশ শেল কেস স্টেটমেন্ট সি-তে সুইচ স্টেটমেন্টের অনুরূপ। এটি পূর্ণসংখ্যার মতো সাধারণ মান পরীক্ষা করতে ব্যবহার করা যেতে পারে এবং অক্ষর।
কেস স্টেটমেন্ট একটি লুপ নয়, এটি n সংখ্যার জন্য কোডের একটি ব্লক কার্যকর করে না। পরিবর্তে, ব্যাশ শেল কন্ডিশন চেক করে এবং প্রোগ্রামের প্রবাহ নিয়ন্ত্রণ করে।
এই নিবন্ধে আসুন আমরা 5টি ব্যবহারিক উদাহরণ সহ bash case কমান্ড পর্যালোচনা করি।
ব্যাশ শেল-এ কেস কনস্ট্রাক্ট আমাদের প্যাটার্নগুলির বিরুদ্ধে স্ট্রিং পরীক্ষা করতে দেয় যাতে ওয়াইল্ড কার্ড অক্ষর থাকতে পারে। ব্যাশ কেস স্টেটমেন্ট হল ব্যাশ if-then-else স্টেটমেন্টের সহজতম রূপ।
ব্যাশ কেস স্টেটমেন্টের সিনট্যাক্স।
case expression in pattern1 ) statements ;; pattern2 ) statements ;; ... esac
ব্যাশ কেস স্টেটমেন্টের মূল পয়েন্টগুলি নিম্নরূপ:
- কেস স্টেটমেন্ট প্রথমে এক্সপ্রেশনকে প্রসারিত করে এবং একে প্রতিটি প্যাটার্নের সাথে মেলানোর চেষ্টা করে।
- যখন একটি মিল পাওয়া যায় তখন ডবল সেমিকোলন (;;) কার্যকর না হওয়া পর্যন্ত সংশ্লিষ্ট সমস্ত বিবৃতি পাওয়া যায়।
- প্রথম ম্যাচের পরে, কেসটি শেষ কমান্ডের প্রস্থান অবস্থার সাথে শেষ হয়ে যায় যা কার্যকর করা হয়েছিল।
- যদি কোন মিল না থাকে, কেসের প্রস্থান অবস্থা শূন্য।
ব্যাশ কেস উদাহরণ 1. একটি প্রক্রিয়াতে সংকেত পাঠানো
নিম্নলিখিত স্ক্রিপ্টটি আর্গুমেন্ট হিসাবে সিগন্যাল নম্বর এবং প্রক্রিয়া আইডি গ্রহণ করে এবং সংকেত নাম ব্যবহার করে একটি প্রদত্ত প্রক্রিয়া আইডিতে সংকেত পাঠায়৷
<কেন্দ্র> কেন্দ্র>এই স্ক্রিপ্টটি কেস স্টেটমেন্টের ব্যবহার প্রদর্শনের জন্য।
$ 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 1000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signal.sh 9 23277 Sending SIGKILL signal $ sleep 1000 Killed
এছাড়াও, আমাদের আগের কিল আর্টিকেল পড়ুন – একটি প্রক্রিয়াকে মেরে ফেলার 4টি পদ্ধতি।
ব্যাশ কেস উদাহরণ। 2. একটি ফাইলে প্যাটার্ন ম্যাচ
এই উদাহরণটি লাইনের সংখ্যা, শব্দের সংখ্যা প্রিন্ট করে এবং প্রদত্ত প্যাটার্নের সাথে মেলে এমন লাইনগুলি মুছে দেয়৷
$ cat fileop.sh #!/bin/bash # Check 3 arguments are given # if [ $# -lt 3 ] then echo "Usage : $0 option pattern filename" exit fi # Check the given file is exist # if [ ! -f $3 ] then echo "Filename given \"$3\" doesn't exist" exit fi case "$1" in # Count number of lines matches -i) echo "Number of lines matches with the pattern $2 :" grep -c -i $2 $3 ;; # Count number of words matches -c) echo "Number of words matches with the pattern $2 :" grep -o -i $2 $3 | wc -l ;; # print all the matched lines -p) echo "Lines matches with the pattern $2 :" grep -i $2 $3 ;; # Delete all the lines matches with the pattern -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.
ব্যাশ কেস রেজেক্স আউটপুট। মুছে ফেলার পর লাইনগুলো Vim:
প্যাটার্নের সাথে মিলে যায়$ ./fileop.sh -d Vim text It is the most popular editor amongst Linux Journal readers.
এছাড়াও, বাশ ~ সম্প্রসারণ এবং { } সম্প্রসারণ সম্পর্কে আমাদের আগের নিবন্ধটি পড়ুন৷
৷ব্যাশ কেস উদাহরণ 3. এক্সটেনশন থেকে ফাইলের ধরন খুঁজুন
এই উদাহরণটি ফাইলের নামের এক্সটেনশনের উপর ভিত্তি করে একটি ফাইলের প্রকার (টেক্সট, সিসোর্স, ইত্যাদি) প্রিন্ট করে।
$ cat filetype.sh #!/bin/bash for filename in $(ls) do # Take extension available in a filename 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
ব্যাশ কেস উদাহরণ 4. হ্যাঁ বা না দিয়ে ব্যবহারকারীকে প্রম্পট করুন
বেশিরভাগ সফ্টওয়্যার ইনস্টলেশনে, লাইসেন্স চুক্তির সময়, এটি ব্যবহারকারীর কাছ থেকে হ্যাঁ বা না ইনপুট জিজ্ঞাসা করবে। নিম্নলিখিত কোড স্নিপেটটি ব্যবহারকারীর কাছ থেকে হ্যাঁ বা না ইনপুট পাওয়ার একটি উপায়৷
$ 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টি ব্যাশ অ্যারে উদাহরণ নিবন্ধটি পড়ুন।
ব্যাশ কেস উদাহরণ 5. স্টার্টআপ স্ক্রিপ্ট
/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 হ্যাকস, রমেশ নটরাজন দ্বারা . আমি আমার বেশিরভাগ সময় লিনাক্স পরিবেশে ব্যয় করি। সুতরাং, স্বাভাবিকভাবেই আমি ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের একটি বিশাল ভক্ত। 15 বছর আগে, যখন আমি *nix-এর বিভিন্ন ফ্লেভারে কাজ করতাম, তখন আমি C shell এবং Korn shell-এ প্রচুর কোড লিখতাম। পরবর্তী বছরগুলিতে, যখন আমি সিস্টেম প্রশাসক হিসাবে লিনাক্সে কাজ শুরু করি, তখন আমি ব্যাশ শেল স্ক্রিপ্টিং ব্যবহার করে সম্ভাব্য প্রতিটি কাজ স্বয়ংক্রিয় করেছিলাম। আমার ব্যাশ অভিজ্ঞতার উপর ভিত্তি করে, আমি ব্যাশ 101 হ্যাকস ইবুক লিখেছি যাতে ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিং উভয় ক্ষেত্রেই 101টি ব্যবহারিক উদাহরণ রয়েছে। আপনি যদি ব্যাশকে আয়ত্ত করার কথা ভাবছেন, তাহলে নিজের উপকার করুন এবং এই বইটি পড়ুন, যা আপনাকে আপনার ব্যাশ কমান্ড লাইন এবং শেল স্ক্রিপ্টিংয়ের নিয়ন্ত্রণ নিতে সাহায্য করবে৷