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

ব্যাশ ব্রেস এক্সপ্যানশন মাস্টার করুন: ৬টি প্র্যাক্টিক্যাল উদাহরণ

ব্যাশ শেল এক্সপ্যানশন

ব্যাশ ব্রেস এক্সপ্যানশন মাস্টার করুন: ৬টি প্র্যাক্টিক্যাল উদাহরণশেল ইনপুট বিশ্লেষণ করার সময় yaptığı অপারেশনের একটি হলো শেল এক্সপ্যানশন। ব্যাশ বিভিন্ন ধরনের এক্সপ্যানশন প্রদান করে। এই আর্টিকেলে আমরা একটি গুরুত্বপূর্ণ এক্সপ্যানশন — “Brace expansion” রিভিউ করব।

এই আর্টিকেল আমাদের চলমান Bash Tutorial সিরিজের অংশ।

ব্রেস এক্সপ্যানশন

ব্রেস এক্সপ্যানশন আर्बিট্রারি স্ট্রিং জেনারেট করতে ব্যবহৃত হয়। ব্রেস এক্সপ্যানশন আপনাকে একটি একক আর্গুমেন্ট থেকে একাধিক মডিফাইড কমান্ড লাইন আর্গুমেন্ট তৈরি করতে দেয়। নির্দিষ্ট স্ট্রিংগুলো অপশনাল পREAMBLE এবং পোস্টস্ক্রিপ্টসহ সকল সম্ভাব্য কম্বিনেশন জেনারেট করতে ব্যবহৃত হয়। পREAMBLE ব্রেসের ভিতরে থাকা প্রতিটি স্ট্রিংয়ে প্রিফিক্স হয়, এবং পোস্টস্ক্রিপ্ট তারপর প্রতিটি ফলাফলে অ্যাপেন্ড হয়, বাম থেকে ডানে এক্সপ্যান্ড হয়।

$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log where last is Preamble and .log is the postscript 

উপরোক্ত echo স্টেটমেন্ট আপনাকে তিনটি লগ ফাইল আলাদা আলাদা স্পেসিফাই করতে থেকে বাঁচায়। আপনি যদি লাস্ট বুট লগ, mce লগ এবং xorg লগের কন্টেন্ট দেখতে চান, তবে ব্রেস এক্সপ্যানশন উপরের echo স্টেটমেন্টের মত ব্যবহার করতে পারেন।

১. ব্রেস এক্সপ্যানশন ব্যবহার করে ব্যাকআপের উদাহরণ

$ 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 এক্সটেনশন দিয়ে কপি করে। ব্রেসের প্রথম এলিমেন্ট খালি, তাই প্রথম এলিমেন্টে শুধু পREAMBLE থাকবে।

২. ব্রেস এক্সপ্যানশন ব্যবহার করে রিস্টোরের উদাহরণ

$ 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 যেখানে দ্বিতীয় এলিমেন্ট খালি।

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

৩. পREAMBLE এবং পোস্টস্ক্রিপ্ট ছাড়া ব্রেস এক্সপ্যানশনের উদাহরণ

যদি কোনো পREAMBLE এবং পোস্টস্ক্রিপ্ট না থাকে, তবে এটি ব্রেসের ভিতরে দেওয়া এলিমেন্টগুলো এক্সপ্যান্ড করবে।

$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin 

অপশনাল পREAMBLE এবং পোস্টস্ক্রিপ্ট স্ট্রিং ছাড়া, ফলাফল শুধু দেওয়া স্ট্রিংগুলোর একটি স্পেস সেপারেটেড লিস্ট।

রেঞ্জের জন্য ব্রেস এক্সপ্যানশন

ব্রেস এক্সপ্যানশন সিকোয়েন্সও এক্সপ্যান্ড করে। সিকোয়েন্সগুলো ইন্টিজার বা ক্যারেক্টার হতে পারে।

৪. ইন্টিজার এবং ক্যারেক্টার সিকোয়েন্সের উদাহরণ

$ 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 

প্রথম cat কমান্ডটি messages.1, messages.2 এবং messages.3 এক্সপ্যান্ড করে এবং কন্টেন্ট দেখায়। এবং নেক্সট echo স্টেটমেন্টে ক্যারেক্টার এবং ইন্টিজার সিকোয়েন্স কম্বাইন করে ব্যবহার করা হয়েছে।

ইনক্রিমেন্ট ভ্যালুসহ সিকোয়েন্স

ksh-এ ব্রেস এক্সপ্যানশনে, আপনি ইনক্রিমেন্ট ভ্যালু ব্যবহার করতে পারেন সিকোয়েন্স জেনারেট করতে।

Syntax: <start>..<end>..<incr> 

incr নিউমেরিক। আপনি নেগেটিভ ইন্টিজার ব্যবহার করতে পারেন, কিন্তু সঠিক সাইন start এবং end-এর অর্ডার থেকে ডিডিউস করা হয়।

৫. সিকোয়েন্সে ইনক্রিমেন্ট ব্যবহারের উদাহরণ

$ ksh $ echo /var/log/messages.{1..7..2} /var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7 $ 

এটি ব্যবহার করে আপনি অল্টারনেট ডে লগফাইল দেখতে পারেন।

ব্রেস এক্সপ্যানশনে পিটফল

ব্রেস এক্সপ্যানশন ব্যাশ ভেরিয়েবল এক্সপ্যান্ড করে না, কারণ ব্রেস এক্সপ্যানশন শেল এক্সপ্যানশনের প্রথম ধাপ, ভেরিয়েবল পরে এক্সপ্যান্ড হবে।

৬. এক্সপ্যানশনে ভেরিয়েবল উদাহরণ

নিচের দুটি for স্টেটমেন্টের আউটপুট দেখলে আপনি উপরের পিটফলটি চিহ্নিত করতে পারবেন।

$ 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} 

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

  2. ব্যাশ ভেরিয়েবল মাস্টার করুন: গ্লোবাল ও লোকাল ব্যবহারের ৬টি প্র্যাক্টিক্যাল উদাহরণ

  3. ব্যাশ শেল ফাংশন মাস্টার করুন: ৬টি প্র্যাক্টিক্যাল উদাহরণ ও টিপস

  4. ব্যাশ স্ক্রিপ্টিং মাস্টার করুন: ৫টি রিয়েল-ওয়ার্ল্ড উদাহরণসহ প্র্যাক্টিক্যাল ইন্ট্রোডাকশন