ব্যাশ 'অনটিল' লুপ: টিউটোরিয়াল এবং উদাহরণ

কমান্ড (গুলি) লুপ করার জন্য ব্যাশ স্ক্রিপ্টে 'অপর্যন্ত' লুপ ব্যবহার করা।

Bash (Bourne Again Shell) হল GNU/Linux অপারেটিং সিস্টেমে একটি শেল কমান্ড প্রম্পট এবং স্ক্রিপ্টিং ভাষা। বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনের জন্য এটি ডিফল্ট শেল।

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

ভূমিকা

দ্য পর্যন্ত Bash-এ লুপ অন্য কমান্ড (গুলি) (কন্ডিশন কমান্ড) এর আউটপুটের উপর ভিত্তি করে একাধিকবার কমান্ড (গুলি) (নির্বাহিত কমান্ড) কার্যকর করতে ব্যবহৃত হয়। কার্যকর করা কমান্ডগুলি চলতে থাকবে যতক্ষণ না কন্ডিশন কমান্ডটি ব্যর্থ হয় (অর্থাৎ, একটি শূন্য স্থিতি প্রদান করে না। লিনাক্সের যেকোনো কমান্ড সাফল্যের জন্য 0 এবং ব্যর্থতার জন্য একটি শূন্য পূর্ণসংখ্যা প্রদান করে)। এটি ঠিক এর বিপরীত যখন loop, যেখানে কন্ডিশন কমান্ড সফল না হওয়া পর্যন্ত নির্বাহিত কমান্ডগুলি চলতে থাকে।

একাধিক শর্ত কমান্ড থাকলে, বিবৃতিটি শুধুমাত্র তালিকার শেষ কমান্ডের স্থিতি বিবেচনা করে, অর্থাৎ, তালিকার শেষ কমান্ডটি ব্যর্থ হওয়া পর্যন্ত লুপটি চলবে।

সাধারণ সিনট্যাক্স

জন্য সাধারণ বাক্য গঠন পর্যন্ত বাশে লুপ হল:

না করা পর্যন্ত

কন্ডিশন কমান্ড লিস্টের শেষ কমান্ডটি ব্যর্থ না হওয়া পর্যন্ত execute কমান্ডের তালিকা চলবে। শেষ কমান্ড সফল হলে, লুপ প্রস্থান করে।

ব্যবহারকারীরা কমান্ড তালিকায় যেকোনো এক্সিকিউটেবল ফাইল নির্দিষ্ট করতে পারেন। এটি মানক লিনাক্স প্রোগ্রাম বা কাস্টম ব্যবহারকারী প্রোগ্রাম বা স্ক্রিপ্ট হতে পারে। প্রতিটি কমান্ড হয় একটি নতুন লাইনে বা একই লাইনে একটি সেমিকোলন দ্বারা পৃথক করা উচিত।

আসুন কয়েকটি উদাহরণ দেখি।

একটি ভেরিয়েবলের একটি নির্দিষ্ট মান না হওয়া পর্যন্ত লুপ করা: নিম্নলিখিত লুপ চলকের মান পর্যন্ত কার্যকর করে এক্স হল 10

x=0 যতক্ষণ না [[ $x -eq 10 ]] do echo $x ((x++)) সম্পন্ন

প্রতিটি পুনরাবৃত্তিতে, আমরা পরীক্ষা করছি x এর মান 10 কিনা। মানটি ব্যবহার করে পরীক্ষা করা হচ্ছে পরীক্ষা আদেশ [[ অভিব্যক্তি ]] পরীক্ষা কমান্ডের জন্য সিনট্যাক্স (দেখুন মানুষ পরীক্ষা).

তারপর ভিতরে কর... সম্পন্ন ব্লক, আমরা কেবল x এর মান প্রিন্ট করি এবং এটি বৃদ্ধি করি। শর্ত কমান্ড সফল হলে লুপটি প্রস্থান করে, যেমন, কখন $x সমান 10.

বিঃদ্রঃ: ইনডেক্স ভেরিয়েবলটি 'অপর্যন্ত' লুপে ব্যবহার করা হবে হয় 'অপরত' লুপের আগে বা কন্ডিশন কমান্ডে, ফর লুপের বিপরীতে, যা একটি পরিবর্তনশীলকে অন্তর্নিহিতভাবে শুরু করতে সক্ষম করে।

একাধিক শর্ত কমান্ড সহ: নিম্নলিখিত লুপ নামের 5টি ডিরেক্টরি তৈরি করে dir0, dir1, ... dir4.

z=0 যতক্ষণ না প্রতিধ্বনিত হয় "হাই" প্রতিধ্বনি "বাই" [[ $z -eq 5 ]] ইকো করুন "Dir$z তৈরি করা হচ্ছে..." mkdir dir$z ((z++)) সম্পন্ন হয়েছে

প্রথম কমান্ড ইকো "হাই" এবং ইকো "বাই" একবার সম্পূর্ণরূপে কার্যকর হবে; তাদের সাফল্য বা ব্যর্থতা লুপ কতক্ষণ চলবে তার উপর কোন প্রভাব ফেলে না।

তারপর ভেরিয়েবল z-এর মান পরীক্ষা করার জন্য test কমান্ডটি কার্যকর হবে। যতক্ষণ না এই কমান্ডটি ব্যর্থ হচ্ছে, অর্থাৎ, z-এর মান 5 না হওয়া পর্যন্ত, কন্ডিশন কমান্ড এবং এক্সিকিউটেড কমান্ডগুলি ক্রমানুসারে চলতে থাকবে। এখানে, প্রতিটি পুনরাবৃত্তির জন্য, এটি প্রথমে 2টি ইকো কমান্ড কন্ডিশনে চালাবে এবং তারপর 3য় শর্ত কমান্ড z-এর মান পরীক্ষা করবে। যদি এটি 5 না হয় তবে এটি লুপে প্রবেশ করে এবং প্রদত্ত কমান্ডগুলি কার্যকর করে।

বিরতি এবং চালিয়ে যান

শর্তসাপেক্ষ প্রস্থান জন্য বিবৃতি বিরতি

আমরা শর্তসাপেক্ষ বিবৃতিও ব্যবহার করতে পারি যদি লুপের ভিতরে। দ্য যদি বিবৃতি a এর সাথে ব্যবহার করা যেতে পারে বিরতি একটি বিবৃতি, লুপ থেকে শর্তসাপেক্ষ প্রস্থানের জন্য।

x=0 পর্যন্ত [[ $x -eq 10 ]] করবেন যদি [[ $x -eq 5 ]] ব্রেক fi echo $x ((x++)) সম্পন্ন হয়

উপরের পর্যন্ত লুপ 0 থেকে 4 পর্যন্ত সংখ্যা প্রিন্ট করবে। তারপর i এর মান 5 হলে, এটি লুপ থেকে বেরিয়ে আসবে। যখন একটি কমান্ড একটি নির্দিষ্ট আউটপুট দেয় তখন লুপ থেকে প্রস্থান করতে হয় তখন এটি বিশেষভাবে কাজে লাগে।

শর্তসাপেক্ষে একটি পুনরাবৃত্তি এড়ানোর জন্য বিবৃতি চালিয়ে যান

বাশ এছাড়াও একটি আছে চালিয়ে যান একটি নির্দিষ্ট শর্ত সন্তুষ্ট হলে একটি লুপে একটি পুনরাবৃত্তির অবশিষ্ট অংশ এড়িয়ে যাওয়ার বিবৃতি।

x=0 পর্যন্ত [[ $x -eq 10 ]] করবেন যদি [[ $x -eq 5 ]] চালিয়ে যান fi echo $x ((x++)) সম্পন্ন

উপরের লুপটি 0 থেকে 10 পর্যন্ত সংখ্যা প্রিন্ট করবে, 5 ছাড়া, কারণ এর পুনরাবৃত্তির সময় x=5 একটি অবিরত বিবৃতি আছে, যা লুপে বাকি কোডটি বাদ দেবে এর পুনরাবৃত্তির সাথে শুরুতে x=6.

লুপ ব্যবহার করা: স্ক্রিপ্ট এবং কমান্ড লাইন

লুপ সিনট্যাক্সগুলি সরাসরি বাশ শেলে বা এক্সিকিউটেবল শেল স্ক্রিপ্ট ফাইল থেকে ব্যবহার করা যেতে পারে। অনুরূপ, একই, সমতুল্য জন্য এবং যখন loops, একবার একটি পর্যন্ত লুপ সিনট্যাক্স শেলে প্রবেশ করানো হয়, শেল ব্যবহারকারীকে লুপ করা কমান্ডগুলি চালিয়ে যেতে দেওয়ার জন্য প্রম্পট চালিয়ে যায়।

অন্যথায়, ব্যবহারকারী এটি একটি স্ক্রিপ্ট ফাইলে সংরক্ষণ করতে পারে এবং স্ক্রিপ্ট ফাইলটি চালাতে পারে।

দ্য #!/bin/bash শুরুতে ফাইলটি কার্যকর করার সময় ব্যবহার করা ইন্টারপ্রেটারকে নির্দিষ্ট করে। যদিও বাশ আজকাল সর্বাধিক ব্যবহৃত শেল, কিছু ব্যবহারকারী শেল পছন্দ করেন zsh, যা এই ফাইলের শুরুতে bash-এর জায়গায় নির্দিষ্ট করা উচিত।

এক্সিকিউট পারমিশন দিতে এই ফাইলের জন্য, চালান:

chmod +x test.sh

অবশেষে, ফাইলটি চালানোর জন্য, চালান:

./test.sh

উপসংহার

দ্য পর্যন্ত লুপ ব্যাশ স্ক্রিপ্টিংয়ের আরেকটি গুরুত্বপূর্ণ বৈশিষ্ট্য। জটিল স্ক্রিপ্টগুলিতে এটির বিশেষ গুরুত্ব রয়েছে যখন প্রোগ্রামগুলির একটি নির্দিষ্ট সেট ব্যর্থতার স্থিতি ফেরত দেবে বলে আশা করা হয়, এবং ব্যর্থতা লগ করার জন্য, বিস্তারিত ত্রুটি প্রদর্শন করতে বা কিছু বিকল্প প্রোগ্রাম চালানোর জন্য অন্য কিছু কমান্ড (গুলি) কার্যকর করতে হবে।