Bash 'While' Loop: টিউটোরিয়াল এবং উদাহরণ

ব্যাশ স্ক্রিপ্টিং-এ 'while' লুপ ব্যবহার করে কমান্ড(গুলি) এর উপর পুনরাবৃত্তি করতে।

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

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

ভূমিকা

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

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

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

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

সম্পন্ন করার সময়

এক্সিকিউট কমান্ড লিস্ট চলতে থাকবে যতক্ষণ না কন্ডিশন কমান্ড তালিকার শেষ কমান্ডটি সফলভাবে চলে এবং স্ট্যাটাস 0 দিয়ে প্রস্থান করে। পুনরাবৃত্তিতে, যখন শেষ শর্ত কমান্ড ব্যর্থ হয়, লুপটি প্রস্থান করে।

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

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

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

x=0 যখন [[ $x -ne 10 ]] প্রতিধ্বনি $x (x++)) করে

প্রতিটি পুনরাবৃত্তিতে, আমরা পরীক্ষা করছি x এর মান 10 কিনা। মানটি ব্যবহার করে পরীক্ষা করা হচ্ছে পরীক্ষা আদেশ [[ অভিব্যক্তি ]] পরীক্ষা কমান্ডের জন্য সিনট্যাক্স (দেখুন মানুষ পরীক্ষা) এখানে যেহেতু আমরা ব্যবহার করছি -ne অপারেটর (যা দাঁড়ায় 'নট ইকুয়াল টু'), টেস্ট কমান্ডটি 0 প্রদান করে, অর্থাৎ সফলতা, যদি x এর মান 10 না হয়, এবং এটি একটি শূন্য মান প্রদান করে না, যেমন, ব্যর্থতা যদি x এর মান 10 হয়।

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

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

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

z=0 ইকো করার সময় "ফাইলের তালিকা:" ls -l [[ $z -ne 5 ]] ইকো করতে হবে "ডির$z তৈরি করা হচ্ছে..." mkdir dir$z ((z++)) সম্পন্ন হয়েছে

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

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

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

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

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

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

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

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

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

x=0 যখন [[ $x -ne 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

উপসংহার

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