ব্যাশ শেল সম্প্রসারণ
শেলের ক্রিয়াকলাপগুলির মধ্যে একটি যখন এটি ইনপুট বিশ্লেষণ করে তা হল শেল প্রসারণ৷ ব্যাশ বিভিন্ন ধরনের সম্প্রসারণ প্রদান করে। এই নিবন্ধে আসুন একটি গুরুত্বপূর্ণ সম্প্রসারণ পর্যালোচনা করি — “বন্ধনী সম্প্রসারণ”।
এই নিবন্ধটি আমাদের চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ৷
বন্ধনী সম্প্রসারণ
ব্রেস সম্প্রসারণ নির্বিচারে স্ট্রিং তৈরি করতে ব্যবহৃত হয়। ব্রেস সম্প্রসারণ আপনাকে একটি একক আর্গুমেন্ট থেকে একাধিক পরিবর্তিত কমান্ড লাইন আর্গুমেন্ট তৈরি করতে দেয়। নির্দিষ্ট করা স্ট্রিংগুলি ঐচ্ছিক পার্শ্ববর্তী প্রস্তাবনা এবং পোস্টস্ক্রিপ্টগুলির সাথে সমস্ত সম্ভাব্য সমন্বয় তৈরি করতে ব্যবহৃত হয়। ব্রেসিস এর মধ্যে থাকা প্রতিটি স্ট্রিংয়ের সাথে প্রস্তাবনাটি প্রিফিক্স করা হয়, এবং পোস্টস্ক্রিপ্টটি তারপরে প্রতিটি ফলাফলের স্ট্রিংয়ের সাথে যুক্ত হয়, বাম থেকে ডানে প্রসারিত হয়।
$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log where last is Preamble and .log is the postscript
উপরের ইকো স্টেটমেন্ট আপনাকে তিনটি লগ ফাইল আলাদাভাবে নির্দিষ্ট করতে এড়িয়ে যায়। আপনি যদি শেষ বুট লগ, mce লগ এবং xorg লগের বিষয়বস্তু দেখতে চান তাহলে উপরের ইকো স্টেটমেন্টে দেখানো হিসাবে আপনি বন্ধনী সম্প্রসারণ ব্যবহার করতে পারেন।
1. বন্ধনী সম্প্রসারণ ব্যবহার করে ব্যাকআপের উদাহরণ
$ cat bkup.sh set -x # expand the commands da=`date +%F` cp $da.log{,.bak} $ ./bkup.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log 2010-05-28.log.bak
উপরের ব্যাকআপ স্ক্রিপ্টে, এটি .bak এক্সটেনশনের সাথে বর্তমান তারিখ লগ ফাইলটি কপি করে। প্রথম উপাদানটি ধনুর্বন্ধনীতে খালি, তাই প্রথম উপাদানটিতে শুধুমাত্র প্রস্তাবনা থাকবে৷
2. ব্রেস সম্প্রসারণ ব্যবহার করে পুনরুদ্ধারের উদাহরণ
$ cat restore.sh set -x # expand the commands da=`date +%F` cp $da.log{.bak,} $ ./restore.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log.bak 2010-05-28.log
পুনরুদ্ধার স্ক্রিপ্টে, প্যারামিটারের প্রথম উপাদানটি হল .bak যেখানে দ্বিতীয় উপাদানটি খালি।
এছাড়াও, অতিরিক্ত পড়ার জন্য ব্যাশ শেল ফাংশন সম্পর্কিত আমাদের আগের নিবন্ধটি পড়ুন।
<কেন্দ্র>3. প্রস্তাবনা এবং পোস্টস্ক্রিপ্ট ছাড়া ব্রেস সম্প্রসারণের উদাহরণ
যদি কোন প্রস্তাবনা এবং পোস্টস্ক্রিপ্ট না থাকে তবে এটি কেবল বন্ধনীতে দেওয়া উপাদানগুলিকে প্রসারিত করে৷
$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin
ঐচ্ছিক প্রস্তাবনা এবং পোস্টস্ক্রিপ্ট স্ট্রিং ছাড়া, ফলাফল হল প্রদত্ত স্ট্রিংগুলির একটি স্পেস বিভক্ত তালিকা
রেঞ্জের জন্য ব্রেস সম্প্রসারণ
ব্রেস সম্প্রসারণ ক্রমগুলিকেও প্রসারিত করে। ক্রমগুলি পূর্ণসংখ্যা বা অক্ষর হতে পারে।
4. পূর্ণসংখ্যা এবং অক্ষর অনুক্রমের উদাহরণ
$ cat sequence.sh cat /var/log/messages.{1..3} echo {a..f}{1..9}.txt $ ./sequence.sh May 9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s May 9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10 May 9 01:23:44 x3 ntpd[2413]: synchronized to May 9 01:47:48 x3 dhclient: DHCPREQUEST on eth0 May 9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201 .. .. a1.txt a2.txt a3.txt a4.txt b1.txt b2.txt b3.txt b4.txt c1.txt c2.txt c3.txt c4.txt
প্রথম ক্যাট কমান্ড, বার্তা.1, বার্তা.2 এবং বার্তা.3 প্রসারিত করে এবং বিষয়বস্তু প্রদর্শন করে। এবং পরবর্তী ইকো স্টেটমেন্টে অক্ষর এবং পূর্ণসংখ্যার ক্রমগুলিকে একত্রিত করে ব্যবহার করা হয়৷
ক্রমবর্ধমান মান সহ ক্রম
kshell বন্ধনী সম্প্রসারণে, আপনি সিকোয়েন্স তৈরি করতে ইনক্রিমেন্ট মান ব্যবহার করতে পারেন।
Syntax: <start>..<end>..<incr>
incr সংখ্যাসূচক। আপনি একটি নেতিবাচক পূর্ণসংখ্যা ব্যবহার করতে পারেন, তবে সঠিক চিহ্নটি শুরু এবং শেষের ক্রম থেকে অনুমান করা হয়৷
5. সিকোয়েন্সে ইনক্রিমেন্ট ব্যবহার করার উদাহরণ
$ ksh $ echo /var/log/messages.{1..7..2} /var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7 $
এটি ব্যবহার করে আপনি বিকল্প দিনের লগফাইলগুলি দেখতে পারেন।
বন্ধনী সম্প্রসারণে ক্ষতি
ব্রেস এক্সপানশন ব্যাশ ভেরিয়েবলকে প্রসারিত করে না, কারণ ব্রেস এক্সপানশন হল শেল এক্সপানশনের প্রথম ধাপ, ভেরিয়েবল পরে প্রসারিত করা হবে।
6. সম্প্রসারণে ভেরিয়েবলের উদাহরণ
আপনি যদি স্টেটমেন্টের জন্য নিম্নলিখিত দুটির আউটপুট দেখতে পান, তাহলে আপনি উপরের সমস্যাটি সনাক্ত করতে পারেন।
$ cat var_seq.sh # Print 1 to 4 using sequences. for i in {1..4} do echo $i done start=1 end=4 # Print 1 to 4 using through variables echo "Sequences expressed using variables" for i in {$start..$end} do echo $i done $ ./var_seq.sh 1 2 3 4 Sequences expressed using variables {1..4}