লিনাক্সে লুপের জন্য ব্যাশ সম্পর্কে আপনার যা জানা দরকার

লিনাক্সে লুপের জন্য ব্যাশ সম্পর্কে আপনার যা জানা দরকার

ব্যাশ স্ক্রিপ্টগুলি স্বয়ংক্রিয়ভাবে কাজ করার একটি অত্যন্ত দক্ষ মাধ্যম, বিশেষ করে যেগুলি অন্যান্য বিদ্যমান প্রোগ্রামগুলির সুবিধা গ্রহণ করে। এই অটোমেশনের জন্য প্রায়শই একই ধরণের অপারেশনকে বেশ কয়েকবার পুনরাবৃত্তি করতে হয়, যা ঠিক কোথায় লুপের জন্য নিজের মধ্যে আসে।





লিনাক্স এবং ম্যাক সিস্টেম অ্যাডমিনিস্ট্রেটররা সাধারণত টার্মিনালের মাধ্যমে স্ক্রিপ্টিংয়ের সাথে পরিচিত, কিন্তু এমনকি উইন্ডোজ ব্যবহারকারীরাও পারে লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেমের সাথে কাজ শুরু করুন





ব্যাশ স্ক্রিপ্ট কিভাবে কাজ করে

একটি ব্যাশ স্ক্রিপ্ট কেবল একটি সাধারণ পাঠ্য ফাইল যা কমান্ডের একটি সিরিজ ধারণ করে যা ব্যাশ শেল পড়তে এবং চালাতে পারে। বাশ হল প্রি-ক্যাটালিনা ম্যাকওএসের ডিফল্ট শেল এবং অধিকাংশ লিনাক্স ডিস্ট্রিবিউশন।





যদি আপনি আগে কখনও শেল স্ক্রিপ্ট নিয়ে কাজ না করেন, তাহলে আপনার একেবারে সহজতম কেস দিয়ে শুরু করা উচিত। এটি আপনাকে স্ক্রিপ্ট তৈরি এবং এর বাস্তবায়ন সহ মূল ধারণাগুলি অনুশীলনের অনুমতি দেবে।

প্রথমে, একটি সুবিধাজনক স্থানে নিম্নলিখিত ফাইলটি তৈরি করুন (আদর্শভাবে, একটি টার্মিনাল খুলুন এবং প্রথমে পছন্দসই ডিরেক্টরিতে নেভিগেট করুন):



#!/bin/bash
echo 'Hello, World'

প্রথম লাইনটি বলে যে এই প্রোগ্রামটি কিভাবে চালানো যায় (যেমন ব্যাশ ইন্টারপ্রেটার ব্যবহার করে)। দ্বিতীয়টি হল কমান্ড লাইনে অন্য যেকোনো একটি কমান্ড। সেই ফাইলটি সেভ করুন hello_world.sh , তারপর:

$ chmod +x hello_world.sh
$ ./hello_world.sh

দ্য chmod প্রথম লাইনের কমান্ড ফাইলটিকে এক্সিকিউটেবল করে তোলে, অর্থাৎ দ্বিতীয় লাইনের মতো এটির নাম টাইপ করে এটি চালানো যায়।





আপনি যদি হ্যালো, ওয়ার্ল্ড শব্দগুলি আপনার টার্মিনালে একটি লাইনে মুদ্রিত দেখেন, তাহলে সবকিছু প্রয়োজনীয় হিসাবে কাজ করছে।

কিভাবে লুপ কাজ করে

সাধারণ প্রোগ্রামিংয়ে, লুপের জন্য দুটি প্রধান প্রকার রয়েছে: সংখ্যাসূচক এবং প্রতিটির জন্য, প্রত্যেকটির জন্য । সংখ্যাসূচক প্রথাটি traditionতিহ্যগতভাবে সবচেয়ে সাধারণ, কিন্তু ব্যাশ ব্যবহারের ক্ষেত্রে, এটি সাধারণত অন্য উপায়।





লুপগুলির জন্য সংখ্যাসূচক সাধারণত একটি একক পূর্ণসংখ্যার উপর ফোকাস করে যা নির্ধারণ করে যে কতগুলি পুনরাবৃত্তি করা হবে, উদাহরণস্বরূপ:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

এটি একটি পরিচিত লুপের সন্ধান যা সঠিকভাবে 100 বার পুনরাবৃত্তি করবে, যদি না আমি লুপের মধ্যে পরিবর্তন না করি, অথবা অন্য একটি বিবৃতি লুপের জন্য থামানো কার্যকর করে।

বিপরীতভাবে, লোরুপ লুপগুলি তালিকা বা অ্যারের মতো কাঠামোর উপর কাজ করে এবং সেই সংগ্রহের মধ্যে প্রতিটি আইটেমের জন্য পুনরাবৃত্তি করে:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

কিছু ভাষা সামান্য ভিন্ন সিনট্যাক্স ব্যবহার করে যা সংগ্রহ এবং আইটেমের ক্রম বদল করে:

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

লুপের জন্য

ব্যাশে, foreach — অথবা এ জন্য Oop লুপ আরো সাধারণ। মৌলিক সিনট্যাক্স, সহজভাবে:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

উদাহরণস্বরূপ, তিনটি স্পষ্টভাবে নামযুক্ত ফাইলের মাধ্যমে পুনরাবৃত্তি করতে:

আইফোন 11 প্রো এবং 12 প্রো তুলনা করুন
for file in one.c two.c three.c
do
ls '$file'
done

যদি বর্তমান ডিরেক্টরিতে এই ধরনের ফাইল বিদ্যমান থাকে, এই স্ক্রিপ্ট থেকে আউটপুট হবে:

one.c
two.c
three.c

একটি নির্দিষ্ট ফাইলের সেটের পরিবর্তে, তালিকাটি গ্লোব প্যাটার্নের মাধ্যমে পাওয়া যেতে পারে (ওয়াইল্ডকার্ড সহ একটি - বিশেষ অক্ষর যা অন্যান্য অক্ষরের প্রতিনিধিত্ব করে)। নিম্নলিখিত উদাহরণে, for loop সমস্ত ফাইল জুড়ে পুনরাবৃত্তি করে (বর্তমান ডিরেক্টরিতে) যাদের নাম '.xml' এ শেষ হয়:

for file in *.xml
do
ls -l '$file'
done

এখানে কিছু উদাহরণ আউটপুট:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

এটি অনেকটা লম্বা হাওয়া করার মত দেখতে হতে পারে:

$ ls -l *.xml

কিন্তু একটি উল্লেখযোগ্য পার্থক্য আছে: for loop এক্সিকিউট করে ls প্রোগ্রামটি পৃথক 2 বার, একটি একক ফাইলের নাম দিয়ে প্রতিবার এটি পাস করা হয়েছে। পৃথক ls উদাহরণে, গ্লোব প্যাটার্ন (*.xml) প্রথমে ফাইলের নামগুলির সাথে মিলিত হয় এবং তারপর তাদের সবগুলিকে পৃথক কমান্ড-লাইন প্যারামিটার হিসাবে একটি উদাহরণে পাঠায় ls

এখানে একটি উদাহরণ যা ব্যবহার করে wc (শব্দ গণনা) প্রোগ্রাম পার্থক্য আরো স্পষ্ট করতে:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

দ্য wc প্রোগ্রাম পৃথকভাবে প্রতিটি ফাইলের লাইনের সংখ্যা গণনা করে, তারপর তাদের সমস্ত জুড়ে মোট গণনা মুদ্রণ করে। বিপরীতে, যদি wc একটি লুপের মধ্যে কাজ করে:

for file in *.xml
do
wc -l $file
done

আপনি এখনও প্রতিটি ফাইলের গণনা দেখতে পাবেন:

44 feed.xml
231 sitemap.xml

কিন্তু কোন সামগ্রিক সারাংশ মোট নেই কারণ wc বিচ্ছিন্নভাবে চালানো হয়, প্রতিবার লুপ পুনরাবৃত্তি করে।

যখন একটি তালিকা একটি তালিকা নয়

বাশ উদ্ধৃত যুক্তি/স্ট্রিংগুলি পরিচালনা করার কারণে লুপগুলি নিয়ে কাজ করার সময় একটি খুব সহজ এবং সাধারণ ভুল রয়েছে। ফাইলের একটি তালিকার মাধ্যমে লুপ করা এইভাবে করা উচিত:

for file in one.c two.c

এটার মত না:

for file in 'one.c two.c'

দ্বিতীয় উদাহরণ ফাইলের নামগুলিকে ডবল কোট-এ আবদ্ধ করে যার ফলে একটি মাত্র প্যারামিটার সহ একটি তালিকায় ফলাফল পাওয়া যায়; for loop শুধুমাত্র একবারই এক্সিকিউট করবে। এই ক্ষেত্রে একটি পরিবর্তনশীল ব্যবহার করে এই সমস্যা এড়ানো যেতে পারে:

FILES='one.c two.c'
for file in $FILES
do
...
done

লক্ষ্য করুন যে ভেরিয়েবল ডিক্লারেশন নিজেই তার মানকে ডাবল কোট-এ আবদ্ধ করতে হবে!

স্ন্যাপচ্যাটে কেউ আপনাকে ব্লক করে দিলে আপনি কিভাবে জানবেন?

একটি তালিকা ছাড়া জন্য

পুনরাবৃত্তি করার কিছুই নেই, একটি লুপ ফরমে চালিত স্ক্রিপ্টে প্রদত্ত কমান্ড-লাইন আর্গুমেন্টগুলিতে কাজ করে। উদাহরণস্বরূপ, যদি আপনার একটি স্ক্রিপ্ট নামে থাকে args.sh নিম্নলিখিত ধারণকারী:

#!/bin/sh
for a
do
echo $a
done

তারপরে args.sh চালানো আপনাকে নিম্নলিখিতগুলি দেবে:

$ ./args.sh one two three
one
two
three

ব্যাশ এই কেসটিকে চিনে এবং আচরণ করে করার জন্য এর সমতুল্য হিসাবে $ in এর জন্য যেখানে $@ হল একটি বিশেষ পরিবর্তনশীল যা কমান্ড-লাইন আর্গুমেন্টের প্রতিনিধিত্ব করে।

লুপের জন্য একটি ditionতিহ্যগত সংখ্যাসূচক অনুকরণ

ব্যাশ স্ক্রিপ্টগুলি প্রায়শই ফাইলের তালিকা বা অন্যান্য কমান্ড থেকে আউটপুটের লাইন নিয়ে কাজ করে, তাই লুপের জন্য সাধারণ। যাইহোক, cতিহ্যগত সি-স্টাইল অপারেশন এখনও সমর্থিত:

for (( i=1; i<=5; i++ ))
do
echo $i
done

এটি ক্লাসিক ফর্ম যার তিনটি অংশ রয়েছে:

  1. একটি পরিবর্তনশীল আরম্ভ করা হয় (i = 1) যখন লুপটি প্রথম সম্মুখীন হয়
  2. অবস্থা যতক্ষণ পর্যন্ত লুপ চলতে থাকে (i<=5) is true
  3. প্রতিবার লুপের চারপাশে, পরিবর্তনশীল বৃদ্ধি পায় (i ++)

দুটি মানগুলির মধ্যে পুনরাবৃত্তি একটি সাধারণ যথেষ্ট প্রয়োজনীয়তা যা একটি ছোট, সামান্য কম বিভ্রান্তিকর বিকল্প রয়েছে:

for i in {1..5}
do
echo $i
done

বন্ধনী সম্প্রসারণ যা কার্যকরভাবে কার্যকরভাবে উপরে লুপের জন্য অনুবাদ করে:

for i in 1 2 3 4

ব্রেক এবং কন্টিনিউ সহ ফাইনার লুপ কন্ট্রোল

লুপগুলির জন্য আরও জটিল প্রায়ই তাড়াতাড়ি বেরিয়ে যাওয়ার একটি উপায় প্রয়োজন বা অবিলম্বে পরবর্তী লুপের সাথে মূল লুপটি পুনরায় চালু করতে হবে। এটি করার জন্য, ব্যাশ বিরতি ধারন করে এবং অন্যান্য প্রোগ্রামিং ভাষায় প্রচলিত বিবৃতি অব্যাহত রাখে। এখানে একটি উদাহরণ যা উভয় ব্যবহার করে প্রথম ফাইলটি 100 অক্ষরের বেশি দীর্ঘ খুঁজে পেতে:

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

এখানে লুপ বর্তমান ডিরেক্টরিতে সমস্ত ফাইলে কাজ করে। যদি ফাইলটি নিয়মিত ফাইল না হয় (উদা it’s যদি এটি একটি ডিরেক্টরি), অবিরত বিবৃতিটি পরবর্তী ফাইলের সাথে লুপটি পুনরায় চালু করতে ব্যবহৃত হয়। যদি এটি একটি নিয়মিত ফাইল হয়, দ্বিতীয় শর্তাধীন ব্লক এটি 100 টির বেশি অক্ষর আছে কিনা তা নির্ধারণ করবে। যদি তাই হয়, ব্রেক স্টেটমেন্ট অবিলম্বে for for loop (এবং স্ক্রিপ্টের শেষে পৌঁছানোর জন্য) ব্যবহার করা হয়।

উপসংহার

একটি বাশ স্ক্রিপ্ট হল এমন একটি ফাইল যা নির্দেশাবলীর একটি সেট রয়েছে যা কার্যকর করা যেতে পারে। A for loop একটি স্ক্রিপ্টের অংশকে অনেকবার পুনরাবৃত্তি করতে দেয়। ভেরিয়েবল, এক্সটার্নাল কমান্ড এবং ব্রেক এন্ড কন্টিনিউ স্টেটমেন্ট ব্যবহার করে ব্যাশ স্ক্রিপ্ট আরো জটিল যুক্তি প্রয়োগ করতে পারে এবং বিস্তৃত কাজ সম্পন্ন করতে পারে।

শেয়ার করুন শেয়ার করুন টুইট ইমেইল এটি কি উইন্ডোজ 11 এ আপগ্রেড করার যোগ্য?

উইন্ডোজ নতুন করে ডিজাইন করা হয়েছে। কিন্তু এটি কি আপনাকে উইন্ডোজ 10 থেকে উইন্ডোজ 11 এ স্থানান্তরিত করার জন্য যথেষ্ট?

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • লিনাক্স
লেখক সম্পর্কে ববি জ্যাক(58 নিবন্ধ প্রকাশিত)

ববি একজন প্রযুক্তি উৎসাহী যিনি দুই দশকের বেশিরভাগ সময় সফটওয়্যার ডেভেলপার হিসেবে কাজ করেছেন। তিনি গেমিং সম্পর্কে উত্সাহী, সুইচ প্লেয়ার ম্যাগাজিনে রিভিউ এডিটর হিসাবে কাজ করছেন এবং অনলাইন প্রকাশনা এবং ওয়েব ডেভেলপমেন্টের সকল ক্ষেত্রে নিমজ্জিত।

ববি জ্যাক থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন