اسکریپت نویسی پیشرفته لینوکس – توابع

اسکریپت نویسی پیشرفته لینوکس برای وبمستر ها – قسمت ۱ – تعریف توابع : ما در زندگی روزمره نیز بسیاری از مجموعه عملکرد های خود را در قالب توابع بسته بندی میکنیم, مثلا رساندن بچه ها به مدرسه! که شامل روشن کردن ماشین, رانندگی تا دم درب منزل, بوق زدن, سوار کردن بچه ها, رانندگی تا درب مدرسه, توقف و پارک کردن, پیاده شدن بچه ها. همه این کارها را در قالب جمله “رساندن بچه ها به مدرسه” بسته بندی میکنیم تا در مکالمات روزمره و برنامه ریزی روزانه راحت تر به آنها اشاره کنیم, در برنامه نویسی نیز همین استراتژی را پیش میبریم,

اسکریپت نویسی پیشرفته لینوکس - تعریف توابع

فرض کنید ۲۰ دستور پشت سر هم بارها در طول برنامه استفاده شده اند, راه حل منطقی این است که به این مجموعه دستورها را در قالب یک نام مربوط بسته بندی کنیم و در موقع نیاز فقط آن نام را صدا بزنیم تا آن ۲۰ دستور بلافاصله اجرا شوند.

اسکریپت نویسی پیشرفته لینوکس – تعریف توابع

 در مثال زیر مجموعه دستورات افزودن کاربر جدید به سیستم را در قالب تابع 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”

خروجی به صورت

۲

خواهد بود

در قسمت بعد توابع بازگشتی را توضیح خواهیم داد.

نظر

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