آشنایی با مفهوم فانکشن در اسکریپتنویسی Shell
Function (فانکشن یا تابع) بلوکی کد است که حاوی یکسری دستورات مرتبط با یکدیگر میباشد؛ بهطورکلی، فانکشنها برای اجرای دستوراتی که حاوی مقادیر ورودی متغیری هستند مناسب میباشند که قرار است بارهاوبارها مورد استفاده قرار گیرند (لازم بهذکر است که نام دیگر فانکشنها در اسکریپتنویسی شل Subroutine است). برای ساخت یک فانکشن در اسکریپت مدنظر میبایست ۲ نکته را مدنظر داشت:
– آشنایی با نحوهٔ ایجاد فانکشن
– آشنایی با نحوهٔ فراخوانی فانکشن
برای نوشتن یک فانکشن، نیاز به یک نام داریم که بااستفاده از آن بعداً بهسادگی خواهیم توانست فانکشن را صدا بزنیم (در اسکریپتنویسی شل، بهجای صدا زدن فانکشن از اصطلاح Call کردن استفاده میشود)؛ سینتکس صحیح ساخت یک فانکشن عبارت است از:
function_name () { command... }
برای مثال، در ادامه فانکشنی ساختهایم تحتعنوان display که این وظیفه را دارا است تا چیزی را نمایش دهد:
display () { echo "This is a sample function" }
توجه داشته باشیم که هر فانکشن میتواند هر تعداد خط کد که نیاز باشد داشته و به هر تعداد که بخواهیم آنرا صدا بزنیم؛ بهعنوان نمونه داریم:
#! /bin/bash display() { echo "This is the message from the function" echo "This parameter passed from calling process is" $1 } display "Behzad" display "Moradi"
همانطور که قبلاً گفته شد، در خط اول مسیر به مفسر بش را دادهایم سپس در خط دوم نامی دلخواه همچون display برای فانکشن خود درنظر گرفتهایم که یک جفت پرانتز مقابل آن قرار گرفته است و درنهایت از علائم { } استفاده کردهایم که آغاز و پایین فانکشن را مشخص میکند.
در مثال فوق، ما در این فانکشن از ۲ دستوری که با کامند echo شروع میشوند استفاده کردهایم؛ در دستور اول گفتهایم که عبارت This is the message from the function بهمعنی «این پیامی از طرف این تابع است» چاپ شود و در دستور دوم که در خط ۴ آمده گفتهایم که عبارت This parameter passed from calling process is بهمعنی «پارامتر پاس داده شده از پروسهٔ فراخوانیکننده برابر است با» بهعلاوهٔ مقدار متغیر 1$ نمایش داده شود.
در آموزشهای قبل گفتیم که هرموقع بخواهیم به اولین پارامتر ورودی فانکشن دسترسی بیابیم، میبایست از 1$ استفاده کنیم و از آنجا هم که در این مثال صرفاً یک پارامتر ورودی داریم، پس 1$ هم پارامتری که بعداً قرار است برای فانکشن display درنظر گرفته شود را نمایش خواهد داد.
در خطوط ۷ و ۸ هم ۲ بار اقدام به اصطلاحاً Call (فراخوانی) کردن فانکشن display کردهایم که در مورد اول از پارامتر ورودی Behzad و در مورد دوم از پارامتر ورودی Moradi استفاده کرده ایم.
حال ابتدا همانطور که قبلاً گفته شد، کدهای فوق را در فایلی با نام دلخواه همچون function.sh ذخیره کرده سپس بااستفاده از دستور زیر این فایل را قابلاجرا میکنیم:
$ chmod +x function.sh
اکنون بهسادگی و بااستفاده از دستور function.sh/. میتوانیم این فایل را اجرا نماییم:
$ ./function.sh This is the message from the function. This parameter passed from calling process is Behzad This is the message from the function. This parameter passed from calling process is Moradi
همانطور که در خروجی مشاهده میشود، به هر تعداد که فانکشن display فراخوانی شده است، دستورات قرار گرفته داخل این فانکشن نیز اجرا میشوند.