• ثبت نام
  • ورود
  • 49624 - 021 تلفن
  • ثبت نام
  • ورود
  • 49624 - 021 تلفن

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

linux advanced linux scripting - novinhost.org

linux advanced linux scripting - novinhost.org

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

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

linux advanced linux scripting - novinhost.org

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

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

خروجی به صورت 

۲

خواهد بود

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

نوشته مشابه

ثبت نظر