راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

اجرای دستورات  »
«  ایجاد اسکریپت‌های خوب

ساخت بلوک‌ها

بلوک‌ سازی شل

دستور زبان شل

اگر ورودی توضیحات نباشد، شل آن را می‌خواند و به کلمات و عملگرها تقسیم می‌کند، قواعد نقل‌قول ها برای مشخص کردن معنی هر کاراکتر ورودی به کار گرفته می‌شود. سپس این کلمات و عملگرهابه فرمان‌ها و سایر ساختارهایی که یک کد خروج معتبر برای بازرسی یا پردازش، برمی‌گردانند، ترجمه می‌شوند .طرح ‎ fork-and-exec‎ بالا فقط بعد از آن که شل ورودی را تحلیل نماید به طریق زیر اعمال می‌شود :

  • شل ورودی‌اش را از یک فایل، یک رشته یا از ترمینال کاربر می‌خواند.

  • ورودی با تبعیت از قواعد نقل‌قول ، به کلمات و عملگرها شکسته می‌شود، ( فصل ۳ محیط Bash را ببینید ). این نشانه‌ها توسط فوق‌کاراکترها جدا می‌شوند. بسط مستعارها انجام می‌شود.

  • شل نشانه‌ها را به دستورات ساده و مرکب تجزیه می‌کند(تحلیل می‌کند و جایگزین می‌نماید) .

  • Bash بسط‌های گوناگون شل را با شکستن نشانه‌ها ی بسط یافته به لیست‌ فایل‌ها، و فرمان‌ها و شناسه‌ها، انجام می‌دهد.

  • در صورت لزوم، تغییر مسیرها انجام می‌شوند، عملگرهای تغییر مسیر از لیست شناسه‌ها حذف می‌شوند.

  • دستورات اجرا می‌شوند.

  • شل منتظر تمام شدن دستورات و جمع‌آوری کدهای خروج می‌ماند.

دستورات شل

یک دستور ساده شل از قبیل touch file1 file2 file3متشکل ازخود دستور و به دنبال آن شناسه‌های، جدا شده با فاصله می‌باشد.

دستورات پیچیده تر شل از چیده شدن دستورات ساده به روش‌های مختلف با یکدیگر، ترکیب گردیده است: در یک خط لوله که خروجی دستور اول، ورودی برای دستور بعدی می‌شود، در یک حلقه یا ساختار شرطی، یا در بعضی گروه‌بندی‌های دیگر. چندنمونه:

ls | more

gunzip file.tar.gz | tar xvf -

توابع شل

توابع شل روشی برای گروه‌بندی فرمان‌ها جهت اجرای بعدی با استفاده از یک نام منفرد برای گروه می‌باشند. آن‌ها دقیقاًمانند یک فرمان “عادی” اجرا می‌شوند. وقتی نام یک تابع شل همچون نام یک دستور ساده، استفاده می‌شود، لیست دستورات مرتبط با آن نام تابع اجرا می‌شوند .

توابع شل در متن همان شل اجرا می‌گردند، برای تفسیر آن‌ها پردازش شل جدیدی ایجاد نمی‌شود .

توابع درفصل ۱۱، توابع تشریح شده‌اند.

پارامترهای شل

یک پارامتر هویتی است که مقادیر را ذخیره می‌کند. می‌تواند یک نام، یک عدد یا یک ارزش ویژه باشد. برای مقاصد شل، یک متغیر پارامتری است که یک نام را ذخیره می‌کند. یک متغیر یک ارزش دارد ، و صفر یا چند ویژگی. متغیرها با دستور داخلی declare شل ایجاد می‌شوند .

اگرمقداری برای آن تعیین نشود، رشته تهی به متغیر تخصیص داده می‌شود. متغیرها فقط بادستور داخلی unset می‌توانند حذف گردند .

تخصیص متغیرها در بخشی به نام «متغیرها»، استفاده پیشرفته از متغیرها در فصل ۱۰ ، بیشتر در باره متغیرها بحث می‌شود.

بسط های شل

بعد از تفکیک هر سطر خوانده شده از خط فرمان به نشانه‌ها، بسط شل انجام می‌شود . بسط های انجام شونده به این قرار هستند :

  • بسط ابرو( { } )

  • بسط مد( ~ )

  • بسط پارامتر و متغیر

  • جانشینی فرمان

  • بسط حسابی

  • تفکیک کلمه

  • بسط نام فایل

این انواع بسط رابه تفصیل در بخشی به نام «بسط شل » بحث خواهیم نمود .

تغییر مسیرها

قبل از آن که یک دستور اجرا شود، ممکن است ورودی یا خروجی‌اش با استفاده ازتفسیر یک علامت گذاری ویژه توسط شل، تغییر جهت داده شود. تغییر مسیر همچنین ممکن است برای بازکردن یا بستن فایل‌ها، جهت محیط شل در حال اجرا، استفاده شود.

اجرای فرمان ها

هنگامی که یک فرمان را اجرا می‌کنیم، کلماتی که تجزیه کننده پوسته به عنوان تخصیص متغیر نشانه‌گذاری نموده ( مقدم بر نام دستور ) و تغییر مسیرها، برای ارجاع بعدی ذخیره می‌شوند. کلماتی که واگذاری متغیر یا علامت تغییر مسیر نیستند، بسط داده می‌شوند، اولین کلمه آنچه پس از بسط حاصل شده است، نام یک فرمان و بقیه، شناسه‌هایی برای آن فرمان در نظر گرفته می‌شوند. سپس تغییر مسیرها انجام می‌شوند، وبعد، رشته‌های تخصیصی به متغیرها بسط می‌یابند. اگر نام دستور نتیجه نشده باشد، متغیرها بر محیط شل جاری تأثیر می‌کنند.

یک قسمت مهم از وظایف شل جستجو برای دستورات است. Bash این کار را به صورت زیر انجام می‌دهد:

  • بررسی می‌کند که آیا دستور شامل /ها می‌باشد .اگر نه،اول با لیست تابع ها کنترل می‌کند، که ببیندآیا نامی مطابق فرمانی که ما می‌خواهیم در آن وجود دارد.

  • اگر دستور یک تابع نباشد، در لیست دستورات داخلی آن را جستجو می‌کند .

  • اگر دستور نه تابع باشد ونه دستور داخلی، با تحلیل دایرکتوری‌های موجود در لیست PATH آن را جستجو می‌کند. Bash از یک جدول hash ( محدوده ذخیره داده در حافظه )برای به خاطر سپردن نام‌های مسیر کامل فایل‌های اجرایی، به منظور اجتناب از جستجوی های گسترده در PATH استفاده می‌کند .

  • اگر جستجو ناموفق باشد ، bash پیغام خطایی با کد خروج ۱۲۷ چاپ می‌کند .

  • اگر جستجو موفق باشد یا نام فرمان شامل ‌/ ها باشد، شل فرمان را در یک محیط اجرای جداگانه اجرا می‌کند.

  • اگر اجرا، به علت قابل اجرا نبودن فایل یا عدم وجود دایرکتوری، با شکست مواجه شود، فرض می‌کند یک اسکریپت پوسته است.

  • اگر فرمان به صورت غیر همزمان اجرا نشده باشد، شل منتظر انجام کامل دستور وجمع‌آوری کدهای خروج آن می‌ماند.

اسکریپت‌های شل

وقتی Bash بدون گزینه ‎-c‎ یا ‎-s‎ با یک فایل محتوی دستورات شل به عنوان اولین شناسه غیرگزینه‌ای فراخوانده شود، این شل اول دایرکتوری جاری را برای فایل اسکریپت جستجو می‌کند، بعد اگر فایل در آن جا یافت نشود، PATH را جستجو می‌کند.

اجرای دستورات  »
«  ایجاد اسکریپت‌های خوب
ترجمه محمود پهلوانی