دوستان و علاقمندان به مباحث آموزش یونیکس (UNIX) ، این آموزش را از سایت پی وی لرن دنبال خواهیم نمود. بررسی توابع Shell در یونیکس (UNIX) رو در این بخش از آموزش دنبال خواهیم نمود.
در این بخش به تفصیل در مورد توابع شل خواهیم پرداخت. توابع به شما امکان می دهد عملکرد کلی یک اسکریپت را به زیرمجموعه های منطقی کوچک تر تقسیم کنید ، که آن ها را می توان در صورت لزوم برای انجام وظایف منحصر به فردی فراخوانی کرد.
استفاده از توابع برای انجام کارهای تکراری روشی عالی برای ایجاد استفاده مجدد از کد است. این بخش مهمی از اصول برنامه نویسی شی گرا مدرن است.
توابع Shell شبیه روال ها ، متدها و توابع در دیگر زبان های برنامه نویسی است.
برای اعلام یک تابع، صرفاً از سینتکس زیر استفاده کنید.
1 2 3 | function_name () { list of commands } |
نام تابع شما function_name است ، و این همان چیزی است که شما برای فراخوانی آن،از هر جای دیگری در اسکریپت های خود استفاده خواهید کرد. نام تابع باید توسط پرانتز دنبال شود و پس از آن لیستی از دستورات محصور در براکت قرار گیرد.
مثال
مثال زیر استفاده از تابع را نشان می دهد.
1 2 3 4 5 6 7 8 9 | #!/bin/sh # Define your function here Hello () { echo "Hello World" } # Invoke your function Hello |
پس از اجرا ، خروجی زیر را دریافت خواهید کرد.
1 2 | $./test.sh Hello World |
شما می توانید تابعی را تعریف کنید که هنگام فراخوانی تابع ، پارامترهایی را بپذیرد. این پارامترها با $۱, $۲ و غیره نمایش داده می شوند.
در زیر مثالی آمده است که دو پارامتر Zara و Ali را عبور می دهیم و سپس این پارامترها را در تابع ضبط و چاپ می کنیم.
1 2 3 4 5 6 7 8 9 | #!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello Zara Ali |
پس از اجرا ، خروجی زیر را دریافت خواهید کرد.
1 2 | $./test.sh Hello World Zara Ali |
اگر دستور خروجی را از داخل یک تابع اجرا کنید ، تأثیر آن نه تنها برای ترمینال اجرای تابع است بلکه درباره ی برنامه شلی است که تابع نامیده می شود.
اگر به جای آن می خواهید تنها اجرای تابع را خاتمه دهید ، راهی برای بیرون آمدن از یک تابع تعریف شده، وجود دارد.
با توجه به وضعیت، شما می توانید هر مقدار از تابع خود را با استفاده از دستور Return، که سینتکس آن به شرح زیر است برگردانید.
1 | return code |
در این جا code می تواند هر چیزی که شما در این جا انتخاب می کنید، باشد. اما بدیهی است که شما باید محتوایی را انتخاب کنید که در اسکریپت تان معنادار یا مفید باشد.
تابع زیر مقدار ۱۰ را برمی گرداند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$? echo "Return value is $ret" |
پس از اجرا ، نتیجه زیر را دریافت خواهید کرد.
1 2 3 | $./test.sh Hello World Zara Ali Return value is 10 |
یکی از ویژگی های جالب توابع این است که می توانند خودشان و همچنین توابع دیگر را فراخوانی کنند. تابعی که خود را فراخوانی می کند به عنوان یک تابع بازگشتی شناخته می شود.
مثال زیر دو تابع تو در تو را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/sh # Calling one function from another number_one () { echo "This is the first function speaking..." number_two } number_two () { echo "This is now the second function speaking..." } # Calling function one. number_one |
پس از اجرا ، نتیجه زیر را دریافت خواهید کرد.
1 2 | This is the first function speaking... This is now the second function speaking... |
شما می توانید تعاریف مربوط به توابع متداول را در داخل profile. خود قرار دهید. این تعاریف هر زمان که وارد شوید در دسترس خواهد بود و می توانید از آن ها در دستور prompt استفاده کنید.
از طرف دیگر ، می توانید تعاریف را در یک فایل ، مثلاً test.sh ، گروه بندی کنید و سپس با تایپ کردن ، فایل را در شل فعلی اجرا کنید.
1 | $. test.sh |
این امر باعث می شود که توابع تعریف شده در test.sh خوانده شود و به شل فعلی به شرح زیر تعریف شود.
1 2 3 4 | $ number_one This is the first function speaking... This is now the second function speaking... $ |
برای حذف تعریف یک تابع از شل، از دستور unset با گزینه f. استفاده کنید. این دستور همچنین برای حذف تعریف متغیر از شل استفاده می شود.
1 | $ unset -f function_name |
در این بخش از آموزش یونیکس، با بررسی توابع Shell در یونیکس (UNIX) همراه بودیم. در بخش بعدی با مبحث Shell Manpage Help در خدمتتون خواهیم بود. با وب سایت آموزشی پی وی لرن همراه باشید.