BASH کوتهنوشتی برای Bourne Again Shell است. بر مبنای پوسته Bourne ، و تا حد ممکن سازگار با ویژگیهای آن میباشد.
شلها مفسرهای فرمان هستند. آنها برنامههای کاربردی میباشند که قابلیت صدور دستورات محاورهای کاربران به سیستم عامل، یا اجرای سریع پردازشهای دستهای را میسر میسازند. به هیچ وجه برای اجرای برنامهها لازم نمیباشند، آنها صرفاً یک لایه بین فراخوانهای سیستم و کاربر هستند.
شل را به مثابه روشی برای صحبت کردن با سیستم خود در نظر آورید. سیستم شما برای اکثر کارهایش احتیاجی به آن ندارد، اما شل یک رابط بسیار خوب مابین شما و آنچه سیستم میتواند ارائه کند، میباشد. شل به شما اجازه میدهد که حساب کنید، بررسیهای اصلی را انجام دهید و برنامههای کاربردی را اجرا نمایید. و از آن مهمتر به شما اجازه میدهد این اعمال را با یکدیگر ترکیب کنید و برنامهها را به هم متصل نموده و عملیات پیچیده را انجام دهید و وظایف را خودکار سازید.
BASH سیستم عامل شما نیست. مدیر پنجره شما نیست. ترمینال شما نیست( اما اغلب داخل ترمینال شما اجرا میشود ). صفحهکلید یا موشواره شما را کنترل نمیکند. سیستم شما را پیکربندی نمیکند، محافظ نمایشگر را فعال نمیسازد، فایلها را با دوبار کلیک نمودن روی آنها برایتان باز نمیکند. به طور کلی Bash درگیر فعال کردن برنامهها از طریق مدیر پنجره یا محیط رومیزی شما نمیشود. این مهم است که بدانید Bash فقط رابط شما برای اجرای فرمانها( با استفاده از دستور زبان آن ) هم در اعلان محاورهای آن و هم در اسکریپتهای Bash میباشد.
در مستندات گنو: Introduction
پوسته یا شل: یک مفسر فرمان( احتمالاً محاورهای )، عمل کننده به عنوان یک لایه بین کاربر و سیستم است.
BASH: یا Bourne Again Shell، یک پوسته سازگار با Bourne است.
ازشما درخواست میشود ، اضافه کنید ، اصلاح کنید ، به شرطی که آنها را مصون از خطا نگاه دارید.لطفاً هر نمونه کدی که مینویسید ، آزمایش کنید .
تمام اطلاعاتی که در اینجا ارائه گردیده، بدون ضمانت و تضمین درستی میباشد. با مسئولیت خودتان به کارببرید. هرگاه مردد هستید، لطفاً صفحههای man یا info گنو را به عنوان مراجع معتبر کنکاش کنید.
هدف این راهنما کمک به افرادی است که علاقمند به یادگیری کار با BASH میباشند. آرزومند است تکنیکهای تمرینی خوبی، برای کار با BASH و نوشتن اسکریپتهای ساده را تعلیم دهد.
این راهنما کاربران مبتدی را هدف قرار داده است. فرض بر عدم وجود دانش پیشرفته مینماید-- فقط توانایی متصل شدن به یک سیستم مبتنی بر یونیکس وبازکردن رابط خط فرمان(ترمینال) را انتظار دارد. اگر چگونگی استفاده از یک ویرایشگر متن را بدانید، کمک خواهد نمود، ما ویرایشگرها را پوشش نمیدهیم، انتخاب ویرایشگر خاصی را توصیه نمیکنیم . آشنایی با مبانی مجموعه ابزار یونیکس،یا سایر زبانهای برنامه نویسی یا مفاهیم برنامه نویسی ضروری نیست، اماآنهایی که از این قبیل آگاهیها دارند، ممکن است برخی مثالها را سریعتر درک کنند.
اگر مطلبی برای شما مبهم میباشد، ازشما میخواهیم آن را گزارش کنید(از BashGuideFeedback ، یا کانال #bash در irc.freenode.org) تا امکان پالایش آن برای خوانندگان آتی فراهم گردد .
همچنین از شما دعوت میگردد، با توسعه و گسترش این راهنما، یا تصحیح اطلاعات نامعتبر یا ناقص آن در بهبود بخشی آن همکاری نمایید.
نگاه دارنده اصلی این سند:
این راهنما همچنین به صورت PDF format در دسترس میباشد.به طور جایگزین، پس از رفتن به FullBashGuide موفق به چاپ هم میشوید. وتضمین میشود که همواره آخرین نگارش این سند را چاپ میگیرید.
من در حال ترجمه راهنمای آموزشی با نام BashGuide که به صورت مشترک ایجاد و نگهداری میشود، اما مؤلف اصلی آن Lhunath میباشد، هستم. این راهنمای آموزشی، بخشی از Greg's Wiki میباشد که گستردهتر از این راهنماست، و شامل چند بخش قابل توجه از جمله BashFAQ که در برگیرنده بیش یکصد پرسش و پاسخ رایج است، و BashPitfalls در برگیرنده بیش از چهل مورد اشتباهات رایج در Bash و BashSheet و چندین فایل جداگانه در تشریح گستردهتر مباحث این راهنما میباشد، که در این راهنما به آنها لینک داده شده است.
مجموع آنها قریب دویست فایل است، که برخی از آنها خود به تنهایی چندین صفحه میباشند. احتمالاً پس از تکمیل ترجمه راهنما به نوبت آنها را ترجمه و در اختیار علاقمندان قرار خواهم داد.
Steve Parker یک مشاور یونیکس و لینوکس با ۲۰ سال تجربه یونیکس و بیش از ۱۵ سال تجربه گنو-لینوکس است.
او یک راهنمای آموزشی اسکریپت نویسی پوسته به صورت online در اینجا قرار داده است، ترجمه فارسی آن را میتوانید در اینجا مطالعه نمایید. همچنین فایل pdf این ترجمه با حجم ۶۰۰K نیز قابل Download است.
نقلقولی از صفحه آغاز این راهنما در معرفی آن از زبان یکی از دوستداران آن:
Doug Kramer (Java, Google.com) می گوید :
"موقعی که من در تیم جاوای شرکت Sun شروع به نوشتن اسکریپت CGIدر پوسته بورن نمودم ، اینترنت را برای یافتن یک راهنمای آموزشی خوب جستجو کردم و از راهنمای Steve Parker، که به راستی آن را دوست دارم ، استفاده نمودم . حالا که من به گوگل نقل مکان کرده ، لینوکس و Bash را برگزیدهام ، تصمیم گرفتهام ، اینجا درگوگل به طور اساسی ازآن به عنوان دوره مقدماتی اسکریپتنویسی bash برای تکنیک نویسان خودمان استفاده کنم . من آن را به عنوان یک نوشته مناسب و سطح بالا پیشنهاد میکنم ، به علاوه ، مرجع سودمندی هم دارد "
ترجمه از The GNU Bash Reference Manual for Bash Version 4.1
در اصل حقیقتاً شل یک ماکرو پردازشگر است که دستورات را اجرا میکند. عبارت ماکرو پردازشگر در اینجا به این معنی است که متن و علائم در آن برای ایجاد عبارتهای بزرگتر بسط مییابند.
یک شل یونیکس، هم یک مفسر فرمان است و هم یک زبان برنامهنویسی میباشد. به عنوان مفسرفرمان، شل یک رابط کاربری برای دستیابی به مجموعه غنی ابزارهای گنو را فراهم میسازد. و به عنوان زبان برنامهنویسی اجازه میدهد که این ابزارها با یکدیگر ترکیب گردند. به این معنا که فایلهایی محتوی دستورات ایجاد میشوند، که خودشان به دستورات تبدیل میگردند. این دستورات جدید که همان وضعیت دستورات سیستمی از قبیل آنهایی که در دایرکتوری bin/ هستند، را دارند، به کاربران اجازه میدهند محیط ویژهای برای خودکارکردن وظایف عمومیشان برقرار نمایند.
شلها میتوانند به طور محاورهای و یا غیر محاورهای استفاده شوند. در حالت محاورهای، آنها ورودی تایپ شده از صفحه کلید را میپذیرند. و موقعی که به طور غیر محاورهای اجرا گردند، دستورات خوانده شده از یک فایل را اجرا میکنند.
یک شل اجرای دستورات گنو را هم به صورت همزمان و هم به صورت غیر همزمان اجازه میدهد. شل برای تکمیل دستورات همزمان قبل از پذیرش ورودی بیشتر، منتظر میماند. اجرای دستورات غیر همزمان توسط شل، در حالیکه دستورات دیگری خوانده و اجرا میشوند، به طور موازی ادامه مییابد.ساختار تغییر مسیر، کنترل مطلوب ورودی و خروجی این دستورات را فراهم مینماید.
شل همچنین یک مجموعه کوچک از دستورات داخلی را که امکان فراهم نمودن آنها به صورت ابزارهای جداگانه، ناجور یا نامطمئن میباشد، را فراهم نموده.
به عنوان مثال cd و break و continue و exec نمیتوانند خارج از شل پیادهسازی گردند. زیرا آنها به طور مستقیم توسط خود شل با مهارت مدیریت میشوند. دستورات داخلی history و getopts و kill یا pwd میتوانند به صورت ابزارهای جداگانه، ایجاد گردند. لیکن مناسبتر است که به صورت دستورات داخلی باشند.
در حالیکه اجرای دستورات، حیاتی است، قدرت و پیچیدگی شلها ناشی از زبان برنامهنویسی جاسازی شده در آنها میباشد. همانند همه زبانهای برنامهنویسی سطح بالا، شل، متغیرها، ساختارهای کنترلی، نقلقولها، و توابع را فراهم مینماید.
شلها برای حالت محاورهای، ویژگیهای خاص بیشتری نسبت به زبان برنامهنویسی ارائه میکنند.