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

بار دیگر شل چیست؟

ترجمه از The GNU Bash Reference Manual for Bash Version 4.1

در اصل حقیقتاً شل یک ماکرو پردازشگر است که دستورات را اجرا می‌کند. عبارت ماکرو پردازش‌گر در اینجا به این معنی است که متن و علائم در آن برای ایجاد عبارت‌های بزرگ‌تر بسط می‌یابند.

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

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

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

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

به عنوان مثال cd و break و continue و exec نمی‌توانند خارج از شل پیاده‌سازی گردند. زیرا آن‌ها به طور مستقیم توسط خود شل با مهارت مدیریت می‌شوند. دستورات داخلی history و getopts و kill یا pwd می‌توانند به صورت ابزارهای جداگانه، ایجاد گردند. لیکن مناسب‌تر است که به صورت دستورات داخلی باشند.

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

شل‌ها برای حالت محاوره‌ای، ویژگی‌های خاص بیشتری نسبت به زبان برنامه‌نویسی ارائه می‌کنند.