آشنایی با نحوهٔ به‌کارگیری از Loop در اسکریپت‌نویسی بش


آشنایی با نحوهٔ به‌کارگیری از Loop در اسکریپت‌نویسی بش


چنانچه نیاز داشته باشیم تا کامندی را بارها و بارها تکرار کنیم، می‌بایست با مفهومی تحت عنوان Loop (لوپ یا حلقه) آشنایی داشته باشیم. معمولاً اجرای لو‌پ‌ها تا زمانی ادامه می‌یابد که شرطی از پیش تعریف شده برابر با True یا False باشد. در اسکریپت‌نویسی Shell معمولاً ۳ نوع لوپ استفاده می‌شود که عبارتند از: while ،for و until.

آشنایی با لوپی از جنس for در اسکریپت‌نویسی بش
for زمانی‌هایی استفاده می‌شود که بخواهیم عملی را روی تک‌تک آیتم‌های یک آرایه یا لیست انجام دهیم تا در نهایت کلیهٔ آیتم‌های آن لیست به پایان برسند. سینتکس این نوع لوپ به شرح زیر است:

در تفسیر کد فوق بایستی بگوییم که variable-name را می‌توان با هم نام دلخواهی جایگزین کرد و این در حالی است که list هم می‌بایست حاوی لیستی از آیتم‌های مختلف باشد (این آیتم‌ها می‌توانند اعداد، استرینگ و … باشند). برای روشن‌تر شدن نحوه‌ٔ کاربرد لوپ‌هایی از جنس for،‌ فایلی می‌سازیم تحت‌ عنوان for.sh و کدهای زیر را داخل آن می‌نویسیم:

همان‌طور که مشخص است، در خط اول مسیر مفسر bash را داده‌ایم و در خط دوم ابتدا کلیدواژهٔ for را نوشته سپس نام دلخواهی برای متغیر خود همچون i (ابتدای حرف Index به معنی اندیس) در نظر می‌گیریم. در ادامه، می‌بایست به این لوپ دستور دهیم تا داخل یک لیست شروع به گشتن کند؛‌ برای همین منظور، کلیدواژهٔ in را نوشته سپس اعداد ۱ الی ۷ را به‌ عنوان آرایه‌ای از آیتم‌های مختلف در نظر می‌گیریم. در ادامه، ابتدا کلیدواژهٔ do را نوشته سپس کامندی که تمایل داریم اجرا شود را می‌نویسیم که در این مثال استفاده از دستور echo برای چاپ کردن عبارت Looping number $i است که i$ هم همان متغیری است که پیش از این تعریف کردیم و در نهایت کلیدواژهٔ done را می‌نویسم که نشانگر پایان این لوپ است.

حال طبق روال گذشته، ابتدا این فایل را با استفاده از دستور chmod +x for.sh قابل‌اجرا کرده سپس آن را به صورت زیر اجرا می‌کنیم:

می‌بینیم که کامند “echo “Looping number $i به تعداد آیتم‌های لیست ورودی، یعنی ۷ بار، تکرار شده و تا زمانی ادامه می‌یابد که دیگر هیچ آیتمی در لیست باقی نمانده باشد. 

حال در مثال بعدی قصد داریم دستور شرطی if با حلقه‌ٔ for را ادغام نماییم. برای این منظور، فایلی تحت عنوان for_and_if.sh ساخته و کدهای زیر را داخل آن می‌نویسیم:

در تفسیر کدهای فوق بایستی بگوییم که با ساختار جدید همچون {20..1} مواجه هستیم. این ساختار طیفی از اعداد مابین ۱ تا ۲۰ را ایجاد می‌کند. علاوه بر این، در خط ۴ شرط گذاشته‌ایم که اگر مقدار متغیر i$ برابر با ۱۰ بود، دستور “echo “$i is the first half of the list به معنی «۱۰ نیمی از این لیست است» چاپ شود و در غیر این صورت، دستور داخل else چاپ گردد. حال پس از اجرایی کردن این فایل، آن‌را تست می‌کنیم:

می‌بینیم که این برنامه به درستی کار کرده و اعداد ۱ الی ۲۰ را نمایش می‌دهد.

آشنایی با لوپی از جنس while در اسکریپت‌نویسی بش
while مادامی‌که شرط برابر با True باشد، ادامه یافته و دستورات در نظر گرفته شده را اجرا می‌کند. سینتکس این نوع لوپ به شرح زیر است:

به عنوان condition (شرط) می‌توان هر کامند یا اپراتوری را استفاده نمود که معمولاً مابین دو علامت [ ] قرار می‌گیرد. علاوه بر این، کامندهایی که تمامل داریم اجرا شوند را می‌بایست مابین ۲ کلیدواژهٔ do و done قرار دهیم. برای روشن‌تر شدن نحوهٔ به‌کارگیری از لوپ‌هایی از جنس while، فایلی تحت عنوان while.sh ساخته و کدهای زیر را داخل آن می‌نویسیم:

در تفسیر کدهای فوق بایستی بگوییم که در خط ۲ متغیری تحت عنوان counter (شمارنده) ایجاد کرده و مقدار پیش‌فرض ۱ را هم برای آن در نظر گرفته‌ایم، در خط ۳ این شرط را در نظر گرفته‌ایم که اگر مقدار متغیر counter$ کوچک‌تر یا برابر با ۱۰ بود (le-)، این حلقه ادامه یابد. سپس در خط ۵ مقدار متغیر counter$ را چاپ کرده و در خط بعد هم با استفاده از (( )) و استفاده از علائم ++ یک واحد به مقدار متغیر counter$ اضافه می‌کنیم. حال پس از اجرایی کردن این فایل، آن‌را تست می‌کنیم:

می‌بینیم که این حلقه تا زمانی که مقدار متغیر counter$ کوچک‌تر یا مساوی با عدد ۱۰ است ادامه یافته اما به محض False شدن شرط در نظر گرفته شده، از حلقه خارج خواهیم شد و در نهایت هم دستور “echo “All done چاپ می‌شود.

آشنایی با لوپی از جنس until در اسکریپت‌نویسی بش
until مادامی‌که شرط در نظر گرفته شده برابر با False باشد، دستورات لوپ را اجرا می‌کند که با این تفاسیر، نقطهٔ مقابل لوپی از جنس while است. به عبارت دیگر، به محض آنکه شرط برابر با True شود، ما از لوپ خارج خواهیم شد. سینتکس این نوع لوپ به شرح زیر است:

همچون while، دستوراتی را که می‌خواهیم داخل این نوع لوپ اجرا شوند را می‌بایست داخل کلیدواژگان do و done قرار دهیم. علاوه بر این، هرگونه کامند یا اپراتوری را هم می‌توان به عنوان شرط برای until در نظر گرفت. به منظور روشن‌تر شدن نحوهٔ کاربرد until، فایلی تحت عنوان until.sh ساخته و کدهای زیر را داخل آن می‌نویسیم:

همان‌طور که ملاحظه می‌شود، ساختار بسیار شبیه به لوپی از جنس while است اما به عنوان شرط until، از اپراتور gt- به معنی «بزرگ‌تر از» استفاده کرده‌ایم.

قبلاً گفتیم که این نوع لوپ تا زمانی ادامه می‌یابد که شرط برابر با False باشد و به محض True شدن آن، از لوپ خارج خواهیم شد. حال یک بار این برنامه را پس از اجرایی کردن فایلش،‌ تست می‌کنیم:

می‌بینیم که خروجی دقیقاً شبیه به خروجی فایل while.sh است با این تفاوت که در این برنامه شرط گذاشته‌ایم به محض اینکه مقدار متغیر counter$ بزرگتر از عدد ۱۰ شد، از لوپ خارج شده و ادامهٔ برنامه اجرا گردد.

دانلود فایل‌های تمرین

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *