ورود ثبت نام 021 - 49624
Logo Logo
  • سرور مجازی
    • فروش سرور مجازیسرور مجازی خارج20 لوکیشن ، تحویل فوری
    • فروش سرور مجازیسرور مجازی ایران5 دیتاسنتر ، ترافیک نامحدود
    • فروش سرور گرافیک دارسرور مجازی گرافیک دارمناسب رندر ، ماشین لرنینگ
    • فروش سرور گرافیک دارسرور مجازی تریدآی پی ثابت ، ترافیک نامحدود
    • فروش سرور مجازیسرور مجازی بورسسرعت بالا ، دسترسی آسان
    • فروش سرور مجازیسرور مجازی اقتصادیآی پی ثابت ، قیمت مناسب
  • سرور اختصاصی
    • فروش سرور اختصاصیسرور اختصاصی ایرانپورت 10 گیگ ، سخت افزار بروز
    • فروش سرور اختصاصیسرور اختصاصی خارجلوکیشن های برتر
    • فروش سرور اختصاصیکولوکیشنارائه از 5 دیتاسنتر برتر
  • هاست
    • هاستهاست ایرانبکاپ منظم ، پهنای باند نامحدود
    • هاستهاست خارجبکاپ منظم ، ترافیک نامحدود
    • فروش اس اس الگواهینامه SSLدامنه های داخلی و خارجی
  • دامنه
  • دانشنامه
  • تماس با ما

لینک های مفید

  • About

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

  • خانه
  • ادامه مطلب
AdvancedLinuxShell-2 - novinhost.org
مهر 21 1400
  • وبلاگ

اسکریپت نویسی پیشرفته لینوکس برای وبمستر ها – قسمت ۲ – توابع پیشرفته : در قسمت قبل یاد گرفتیم که توابع در اسکریپت نویسی شل لینوکس به صورت

name(){

 Commands

 return $VAR

}

تعریف میشوند.

در این قسمت قصد داریم به مباحث پیشرفته تر تعریف توابع بپردازیم

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

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

دستور export –f:

فرض کنید تابعی به صورت زیر دارید:

fname(){
  echo "Foo"
}

در صورتی که بخواهید این تابع را به صورت متغیر استفاده کنید, دستور export –f fname را وارد کنید.

در این صورت موقع استفاده از متغیر fname , مثلا در دستور echo $fname دستورات  داخل تابع fname   اجرا خواهند شد و مقدار خروجی تابع به عنوان مقدار متغییر در نظر گرفته خواهد شد. این دستور برای مواقعی که در دفعات مکرر قصد استفاده از خروجی تابع را دارید مفید خواهد بود.

دستور readonly:

این دستور تابع را غیر قابل تغییر میکند, یعنی پس از یک بار تعریف و readonly  کردن تابع, با تعریف تابع جدیدی به همان نام, تابع تغییری نخواهد کرد.

به این مثال توجه کنید: تابعی به صورت زیر تعریف میکنیم:

function hello() { echo "Hello world"; }

با نوشتن دستور hello   احضار شده و خروجی Hello World   چاپ میشود.

حالا در همان اسکریپت تابع زیر را تعریف میکنیم:

function hello() { echo "Hello, let us be friends."; }

به تعریف تابعی که قبلا هم نام آن وجود داشته, آپدیت کردن تابع میگویند.

حالا دیگر با احضار تابع hello خروجی به صورت Hello, let us be friends  خواهد بود.

در صورتی که بخواهید از تابع اول حفاظت کنید, و جلوی آپدیت شدن آن را بگیرید, پس از تعریف تابع اول , دستور

readonly -f hello

را وارد کنید, در این صورت, حتی اگر تابعی همنام تابع اول تعریف شود, با احضار کردن تابع, دستورات تابع اول اجرا خواهد شد.

توابع محلی:

بعضی متغیر ها مثل x و y  ممکن است بسیار پر استفاده باشند, ممکنطراحی سایتسئو است شما چنین متغیری را به عنوان سراسری تعریف کرده باشد, و نگران این باشید که اگر در تابع دوباره چنین متغیری تعریف کنید, به مشکل بر بخورید, برای رفع این مشکل از دستور local استفاده میکنیم. کافیست متغیر x را به صورت  local x=1 تعریف کنید, در این صورت متغیر x در داخل تابع با محتوی ۱  و خارج از تابع با مقدار متغیر سراسری x (اگر تعریف شده باشد)   شناخته خواهد شد. به مثال زیر توجه کنید:

#!/bin/bash
# gloabal x and y
x=200
y=100

math(){
  # local variable x and y with passed args   
  local x=$1
  local y=$2
  echo $(( $x + $y ))
}

echo "x: $x and y: $y"
# call function 

echo "Calling math() with x: $x and y: $y"
math 5 10

# x and y are not modified by math()
echo "x: $x and y: $y after calling math()"
echo $(( $x + $y ))

میبینید که هم تابع math توابع x و y   را تعریف کرده و هم به صورت سراسری تعریف شده اند.

موقعی که تابع math   احضار میشود تا مقدار این دو متغیر را چاپ کند, مقداری متفاوت با آنچه در متغیر سراسری تعریف شده, چاپ خواهد شد. در واقع ما با دستور local متغیر های x و y را داخل تابع   math محلی کرده ایم.

توابع بازگشتی یا recursive:

توابع بازگشتی برای اجرای برخی الگوریتم ها مثل فاکتوریل بسیار مفید هستند.

در واقع recursion به احضار کردن تابع در داخل همان تابع گفته میشود, شاید انتظار داشته باشید این کار باعث بروز خطا شود, اما اگر درست به کار بسته شود نه تنها با ارور مواجه نخواهید شد بلکه بسیار مفید واقع خواهد شد.

به مثال فاکتوریل توجه کنید:

factorial ()
{
local number=$1
if [ $number -eq 0 ]
then
Factorial=1
else
let “next = number – 1”
factorial $next
Factorial=`echo $number * $Factorial | bc`
#   let “Factorial = $number * $Factorial”
fi
return $Factorial 2>/dev/null
}

طبق معمول در این جلسه هم یک سایت خوب برای یادگیری اسکریپت نویسی معرفی میکنیم»

وبسایت http://www.bashguru.com/ مطالب بسیار مفیدی در زمینه مدیریت لینوکس و اسکریپت نویسی ارائه میدهد.

امتیاز دهید!
نوشته قبلی نوشته بعدی

درج نظر لغو پاسخ

نوشته‌های تازه

  • URL چیست و چه کاربرد هایی دارد ؟
  • مقدمه ای بر HTML5 و مفاهیم مربوطه
  • آشنایی با windows server 2012 | بخش دوم
  • آشنایی با ویندوز سرور ۲۰۱۲
  • موتور های جستحو چگونه کار می کنند ؟

آخرین دیدگاه‌ها

  1. محمدمهدی در آموزش نصب wordpress ، نصب آسان و سریع وردپرس در ۵ دقیقه
  2. pars-design.ir در اسکن امنیتی ورد پرس با WPscan + فیلم
  3. نوین هاست در اتصال به سرور های لینوکسی + آموزش
  4. یاسین در اتصال به سرور های لینوکسی + آموزش
  5. نوین هاست در اصطلاحات Docker

دسته‌ها

  • راهکار های سازمانی
  • سرور مجازی
  • لایسنس
  • محصولات
  • نمایندگی فروش
  • وبلاگ

برچسب‌ها

اموزش نصب ssl در ویندوز سرور اموزش نصب اس اس ال رایگان اموزش وصل شدن به سرور نحوه اتصال به سرور با موبایل
Logo


تلفن : 49624 – 021
تلفن : 91070308 – 021
admin@novinhost.org
تلگرام : novinhost_org@
کانال تلگرام : novinhost@
تهران ، فلکه دوم صادقیه ، بلوار آیت الله کاشانی ، روبروی پمپ بنزین ، پلاک 160 طبقه 8

سرور مجازی

  • سرور مجازی آلمان
  • سرور مجازی فرانسه
  • سرور مجازی انگلیس
  • سرور مجازی آمریکا
  • سرور مجازی کانادا
  • سرور مجازی هلند
  • سرور مجازی فنلاند

سرور اختصاصی

  • سرور اختصاصی ایران
  • سرور اختصاصی برج میلاد
  • سرور اختصاصی تبیان
  • سرور اختصاصی خارج
  • سرور اختصاصی آلمان
  • سرور اختصاصی فرانسه
  • سرور اختصاصی آمریکا

نمادها و مجوزها

نمادها و مجوزهانظام صنفی

  • شبکه های اجتماعی نوین هاست را در شبکه های اجتماعی حتما دنبال کنید!

تمام حقوق این سایت محفوظ و متعلق به نوین هاست می باشد.

  • قوانین سرویس دهی
  • درباره ما
  • شماره حساب ها
  • استخدام