اسکریپت نویسی پیشرفته لینوکس برای وبمستر ها – قسمت ۱ – تعریف توابع : ما در زندگی روزمره نیز بسیاری از مجموعه عملکرد های خود را در قالب توابع بسته بندی میکنیم, مثلا رساندن بچه ها به مدرسه! که شامل روشن کردن ماشین, رانندگی تا دم درب منزل, بوق زدن, سوار کردن بچه ها, رانندگی تا درب مدرسه, توقف و پارک کردن, پیاده شدن بچه ها. همه این کارها را در قالب جمله “رساندن بچه ها به مدرسه” بسته بندی میکنیم تا در مکالمات روزمره و برنامه ریزی روزانه راحت تر به آنها اشاره کنیم, در برنامه نویسی نیز همین استراتژی را پیش میبریم,
فرض کنید ۲۰ دستور پشت سر هم بارها در طول برنامه استفاده شده اند, راه حل منطقی این است که به این مجموعه دستورها را در قالب یک نام مربوط بسته بندی کنیم و در موقع نیاز فقط آن نام را صدا بزنیم تا آن ۲۰ دستور بلافاصله اجرا شوند.
اسکریپت نویسی پیشرفته لینوکس – تعریف توابع
در مثال زیر مجموعه دستورات افزودن کاربر جدید به سیستم را در قالب تابع add_a_user() بسته بندی کردیم:
- add_a_user()
{
USER=$1
PASSWORD=$2
shift; shift;
# Having shifted twice, the rest is now comments …
COMMENTS=$@
echo “Adding user $USER …”
echo useradd -c “$COMMENTS” $USER
echo passwd $USER $PASSWORD
echo “Added user $USER ($COMMENTS) with pass $PASSWORD”
}
- تعریف تابع با نوشتن نام تابع و افزودن پرانتز باز و بسته شروع میشود, سپس یک براکت باز شروع بلوک دستورات تابع را مشخص میکند.
- دستور اول متغیر موقعیتی (که در قسمت های قبل توضیح داده شده) اول را در متغیر USER قرار میدهد.
- دستور بعدی, پارامتر متغیر موقعیتی دوم را به عنوان رمز عبور کاربر در متغیر PASSWORD قرار میدهد
- دستور سطر سوم ورودی های متغیر های موقعیتی را دو بار شیفت میدهد تا بقیه ورودی ها به عنوان Comment شناخته شوند.
- دستور بعد همه ورودی های باقی مانده را با متغیر $@ در متغیر COMMENTS میریزد.
- در دستورات بعدی نیز کاربر را اضافه کرده و رمز عبور را تعیین میکنیم و نتیجه را با دستور echo به اطلاع کاربر میرسانیم.
حالا یک تابع داریم که میتوانیم مانند مثال زیر بارها آنرا احضار کنیم:
add_a_user bob letmein Bob Holness the presenter add_a_user fred badpassword Fred Durst the singer add_a_user bilko worsepassword Sgt. Bilko the role model
با دستورات بالا, تابع add_a_user سه بار احضار میشود و هر بار یک کاربر را تعریف کرده و پسورد مشخصی را به آن اختصاص میدهد.
توابع متغیر ها را حتی در خارج از بلوک خود تغییر میدهند, به مثال زیر توجه کنید:
myfunc() { echo "I was called as : $@" x=2 }
### Main script starts here
echo “Script was called with $@”
x=1
echo “x is $x”
myfunc 1 2 3
echo “x is $x”
خروجی به صورت زیر خواهد بود»
Script was called with a b c x is 1 I was called as : 1 2 3 x is 2
یعنی تابع متغیر x را در خارج از بلوک خود از ۱ به ۲ تغییر میدهد.
یک مثال دیگر:
mfunc()
{
x=3
}
x=2
echo “$x”
mfunc
echo “$x”
خروجی به صورت
۲
خواهد بود
در قسمت بعد توابع بازگشتی را توضیح خواهیم داد.