منبع اصلی نوشتار زیر در این لینک قرار دارد

تعریف تابع و استفاده از آن به عنوان دستور

کد های شل اسکریپت که در فایل هایی ذخیره می شوند از بالا به پایین تفسیر شده و خروجی را تولید می کنند. توابع امکان تکرار نوشتن کد های تکراری را از بین می برد به این صورت که یکبار کد ها را تحت یک نام نوشته و سپس از آن کد ها توسط فراخوانی تابع استفاده می کنیم. در تعریف توابع تنها نیاز به تعریف نام تابع و سپس تعریف دستورات در بلاک تابع است.

اجباری در نوشتن کلمه function پیش از نام تابع نیست. نام تابع مانند نام متغیر ها به بزرگی و کوچکی حروف حساس بوده و نباید با یک عدد شروع شوند ولی می توانند با علامت Underline شروع بشوند.

تابع توسط نامش فراخوانی می شود. همچنین در هنگام فراخوانی می توان آرگومان ها را به تابع ارسال کرد.

name

در شکل زیر دو تابع usage و is_file_exist تعریف شده اند. تابع usage تنها پیامی را در صورتی که خطایی رخ دهد نشان می دهد و تابع is_file_exist بررسی می کند که آیا فایل وجود دارد یا نه و پیغام مناسب را نشان می دهد.

خط زیر درون تابع is_exist_file یک متغیر به نام f تعریف می کند. این متغیر به خاطر دستور local تنها در همین تابع (نه در کل اسکریپت) قابل شناسایی است. همچنین متغیر 1$ اولین ورودی به نام اسکریپت است.

local f=$1

همچنین اگر هنگام اجرای اسکریپت ورودی نداشته باشید ( مقدار متغیر #$ برابر صفر باشد) تابع usage فراخوانی شده و پیغامش را چاپ می کند. فایل را به نام file.sh ذخیره کنید و مجوز اجرا را به آن بدهید.

chmod +x file.sh

روش های اجرای آن به صورت زیر است.

file.sh/.

file.sh /etc/resolve.conf/.

اولین اجرا خطا می دهد چون هیچ ورودی نداریم (یعنی متغیر #$ برابر صفر است.). اما اجرای دوم نام (مسیر) فایل resolve.conf را بعنوان متغیر 1$ در متغیر f درون تابع معرفی می کند.

چگونه تابعی بعنوان دستور تعریف کنیم؟

فایل bashrc. در دایرکتوری هر کاربر و فایل etc/.bashrc/ بصورت عمومی برای تمامی کاربران وجود دارند که می توانید توابع و Alias ها را در این دو فایل به ترتیب برای هر کاربر یا برای عموم کاربران تعریف کنید. در ادامه چندین فایل در فایل bashrc. تعریف شده است. توجه کنید که توابع را در فایلی خاص تعریف نکردیم بلکه توابع را در این فایل ها تعریف کردیم و از این پس نام آنها به عنوان دستور شناخته می شود.

  • تابعی که فقط دایرکتوری های درون دایرکتوری را نشان می دهد.

در تابع lid (مخفف list directory) در شرط if بررسی می شود که اگر ورودی از standard input بود، دایرکتوری تمامی ورودی ها را لیست کن. در غیر این صورت دایرکتوری های درون دایرکتوری جاری را نشان بده.

  • تابعی که فقط فایل های درون دایرکتوری را نشان می دهد.

تابع lif (مخفف list file) تنها فایل های درون یک دایرکتوری (حالا چه از standard input یا دایرکتوری جاری) را نشان می دهد. تفسیر دو تابع شبیه به هم است، تنها تفاوت در این است که در جلوی grep از علامت – استفاده شده است. در خروجی دستور ls -l علامت – نشان دهنده یک فایل معمولی است. شما می توانید توابع دیگری برای نشان دادن لینک ها با حرف l و … استفاده کنید.

  • تابعی که محتوای متغیر PATH$ را در خطوط زیر هم نشان می دهد.

پس از نوشتن توابع خود درون هر یک از فایل bashrc. و etc/bashrc/ برای اینکه از این پس نام توابع بعنوان دستور عمل کنند، دستور های زیر را (در bash) اجرا کنید. (با توجه به اینکه درون کدام فایل توابع را تعریف کرده باشید)

source ~/.bashrc

source /etc/bashrc

حالا بطور مثال اگر دستور lif را اجرا کنید (بدون پرانتز ها) فایل درون دایرکتوری جاری نشان داده می شود.

lif



برچسب ها : , , , , , ,