اگر ورودی توضیحات نباشد، شل آن را میخواند و به کلمات و عملگرها تقسیم میکند، قواعد نقلقول ها برای مشخص کردن معنی هر کاراکتر ورودی به کار گرفته میشود. سپس این کلمات و عملگرهابه فرمانها و سایر ساختارهایی که یک کد خروج معتبر برای بازرسی یا پردازش، برمیگردانند، ترجمه میشوند .طرح 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 پیغام خطایی با کد خروج ۱۲۷ چاپ میکند .
اگر جستجو موفق باشد یا نام فرمان شامل / ها باشد، شل فرمان را در یک محیط اجرای جداگانه اجرا میکند.
اگر اجرا، به علت قابل اجرا نبودن فایل یا عدم وجود دایرکتوری، با شکست مواجه شود، فرض میکند یک اسکریپت پوسته است.
اگر فرمان به صورت غیر همزمان اجرا نشده باشد، شل منتظر انجام کامل دستور وجمعآوری کدهای خروج آن میماند.