مفهوم Shell یا پوسته در لینوکس

پوشه (Shell) در همه سیستم عامل ها لایه ای میان کاربر و هسته سیستم عامل است. پوسته ها را بیشتر به گونه خط فرمان (Command Line) می شناسیم که دستورهایی را از کاربر گرفته و سپس یک خروجی را برگشت می دهند. این خروجی می تواند یک خطا یا یک مقدار درست و دلخواه شما باشد. بنابراین پوسته ها یک ورودی را دریافت و سپس خروجی را برگشت می دهند.

توجه کنید که نباید مفهوم پوسته و ترمینال را با یکدیگر یکسان بدانید. پوسته یک لایه از سیستم عامل است که می توانیم آن را یک مفسر دستورهای ورودی از سوی کاربر است ولی ترمینال (Terminal) یک نرم افزار است که وظیفه آن دریافت دستور است ولی کاربرد پوسته، تفسیر و اجرای دستورهایی است که از ترمینال فرستاده شده اند. در زیر نام برخی از پوسته های مشهور در سیستم عامل های یونیکسی فهرست شده است.

  • Bash
  • ZSh
  • CSh
  • Korn

در سیستم عامل های یونیکسی مانند لینوکس، مکینتاش، سولاریس و FreeBSD، یک پوسته مانند Bash یا Korn یک مفسر (interpreter) و یک زبان برنامه نویسی است. از دید مفسر، گفتیم که پوسته باید واسطه ای یا لایه میان کاربر با سیستم عامل برای انجام دستورهای کاربر است که می توانیم به ساخت یک فایل یا دایرکتوری و یا تغییر به دایرکتوری دیگر و دیگر نمونه اشاره کنیم.

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

از دید انجام (یا اجرای) دستورها، پوسته ها می توانند به دو گونه پوسته های هم کنشی (یا تعاملی – Interactively) و نا هم کنشی (غیر تعاملی – Non Interactively) باشند. در پوسته های interactively، یک دستور از صفحه کلید به پوسته فرستاده می شود ولی در پوسته های Non Interactively، دستور یا دستورها از یک فایل به پوسته ها فرستاده خواهند شد.

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

از دید دیگری درباره انجام دستورها، دستورها می توانند به گونه همگام (Synchronously) یا ناهمگام (Asynchronously) انجام شوند. در دستورهایی که همگام انجام می شوند، پوسته قفل شده و تا زمانی که دستور کنونی پایان نیابد، پوسته برای انجام دستور دیگر، آزاد نمی شود. ولی در حالت ناهمگام، پوسته منتظر پایان یافتن دستور دیگری نمی شود، بلکه دستور کنونی را در پس زمینه اجرا کرده و سپس دستور دیگری را دریافت می کند. هر زمان که خروجی دستور پس زمینه آماده شد، آنرا نمایش می دهد.