پروژه گنو (GNU's Not UNIX) ابزارها و نرمافزارهای آزاد و کاملا سازگار با یونیکس را برای مدیران سیستمهای مبتنی بر یونیکس، فراهم میکند.
Bash شل سازگار با sh میباشد، که ویژگی های سودمند شلهای، کورن (ksh) و سیشل (csh) را با آن درهم آمیخته است. علاقمند به سازگاری با شل استاندارد IEEE POSIX P1003.2/ISO 9945.2، و ابزارهای استاندارد میباشد. اصلاح وبهسازی کارآمدی بر sh هم برای برنامهنویسی، هم در استفاده محاورهای، ارائه مینماید، اینها عباتند از، ویرایش دستورات خط فرمان، اندازه نامحدود تاریخچه خط فرمان، کنترل job، توابع شل و مستعارها، آرایههای با اندازه نامحدود، و محاسبات اعداد صحیح در هر پایهای، از مبنای ۲ تا ۶۴ . Bash اکثر اسکریپتهای sh را بدون نیاز به ویرایش اجرا میکند.
همانند سایر پروژههای گنو، نوآوری Bash با حفظ و حراست از آزادی استفاده، مطالعه، نسخهبرداری، ویرایش و توزیع مجدد نرمافزار شروع شده بود. این شرایط عمومی شناخته شده برای برانگیختن خلاقیت میباشد. مورد دیگر اینکه Bash دارای ویژگیهای فوقالعاده، بسیار زیادی، که سایر شلها نمیتوانند ارائه کنند، نیز میباشد.
علاوه بر گزینههای یک کاراکتری خط فرمان شل، که عموماً میتوانند با فرمان داخلی، set شل، تنظیم شوند، تعدادی گزینه چندکاراکتری نیز وجود دارند، که میتوانید به کار ببرید. با تعدادی ازگزینههای رایحتر در این فصل و فصلهای بعدی برخورد خواهیم کرد، لیست کامل آنها را میتوان در صفحات info یافت، → .
فایلهای Startup اسکریپتهایی میباشند، که Bash موقع شروع به کار آنها را میخواند و اجرامینماید .بخشهای فرعی زیر روشهای مختلف آغاز به کار شل، و در نتیجه فایلهای startup خوانده شده را، توضیح میدهند.
محاورهای یعنی شما میتوانید دستورات را وارد کنید. یک شل login (ورود به سیستم )، یعنی شما پس از شناسایی توسط سیستم، که معمولاً با دریافت نام کاربری و کلمه عبور صورت میگیرد، یک شل دریافت میکنید.
فایلهای خوانده شده :
/etc/profile
~/.bash_profile
,~/.bash_login
یا~/.profile
: اولین فایل موجود قابل خواندن، خوانده میشود~/.bash_logout
به مجرد خروج خوانده میشود .
اگر یکی از فایلهای پیکربندی موجود باشد اما قابل خواندن نباشد، پیغام خطا چاپ میشوند. اگر یک فایل موجود نباشد Bash بعدی را جستجو میکند .
شل بدون login یعنی لازم نیست که شما توسط سیستم شناسایی بشوید. به عنوان مثال، موقعی که با یک آیکون یا موردی از یک منو، ترمینالی را باز میکنید، این یک شل بدون login است.
فایلهای خوانده شده :
~/.bashrc
این فایل به طور معمول به فایل ~/.bash_profile
رجوع میکند :
if
[ -f
; then . ~/.bashrc
]~/.bashrc
; fi
فصل ۷, جملات شرطی را برای اطلاعات بیشتر در باره ساختار if ملاحظه کنید.
همه اسکریپتها از شل غیر محاورهای استفاده میکنند. آنها برای وظایف معینی برنامهریزی شدهاند و نمیتوانند در کارهای دیگری غیر از آنچه برای آن برنامهریزی شدهاند، به کار گرفته شوند.
فایلهای خوانده شده :
برای این فایل PATH
جستجو نمیشود ، بنابراین اگر میخواهید از آن استفاده کنید ، بهترین کار رجوع با نام و مسیر کامل فایل میباشد.
Bash سعی میکند در حالیکه به خوبی با استاندارد POSIX مطابقت مینماید ، همانند برنامه بورن sh تاریخی رفتار نماید.
خواندن فایل ها :
/etc/profile
~/.profile
وقتی به طور غیرمحاورهای احضار میشود، متغیر ENV
میتواند به اطلاعات اضافی شروع اولیه ( startup ) اشاره کند .
این حالت هم با استفاده از دستور داخلی set فعال میشود :
set
-o posix
هم در فراخوانی برنامه bash با استفاده از گزینه --posix
. سپس Bash سعی میکند، تا آن جا که برای شلها ممکن است موافق با استاندارد POSIX رفتار کند . برقرار کردن متغیر POSIXLY_CORRECT
نیز همان کار را انجام میدهد .
خواندن فایلها :
توسط متغیر
ENV
تعیین میشود .
فایلهای خواندنی موقعی که پوسته توسط rshd احضار میشود :
~/.bashrc
اجتناب از ابزارهای r | |
---|---|
ازخطرات کاربرد ابزارهایی همچون rlogin ، telnet ، rsh و rcp آگاه باشید. آن ها فی نفسه ناامن هستند، زیرا اطلاعات محرمانه را به صورت متن رمز نشده در شبکه ارسال میکنند. اگر به اجرای راه دور مثل انتقال فایل و مشابه آن نیاز دارید، از پیاده سازی شل امن (Secure SHell ) که معمولاً SSH نامیده میشود، استفاده کنید، از طریق http://www.openssh.org به طور آزاد در دسترس میباشد. برنامه های سرویس گیرنده متمایزی هم برای سیستم های غیر یونیکسی در دسترس است، به آرشیو نرمافزارهای منطقه خودتان نگاه کنید. |
یک شل محاورهای در حالت عادی از ورودی متصل به ترمینال کاربری میخواند و در خروجی متصل به آن مینویسد. رفتار فعل و انفعالی Bash موقعی شروع میشود، که فرمان bash بدون شناسه(argument) غیر گزینهای استفاده شود، به غیر از موقعی که گزینه، رشتهای برای خواندن از آن باشد، یا وقتی که شل برای خواندن از ورودی استاندارد، احضار میشود، که قراردادن پارامترهای موضعی را مجاز میکند ( فصل ۳ محیط Bash را ملاحظه کنید) .
با نگاه به محتوای متغیر ویژه -
بررسی کنید ، اگرشامل یک ' i ' باشد، شل محاورهای است :
eddy:~>
echo$-
himBH
در شلهای غیرمحاورهای ، اعلان فرمان ،یعنی متغیر PS1
، برقرار نگردیده است .
Bash فایلهای اجراشوندهاولیه (startup) را میخواند .
کنترل job به طور پیشفرض فعال است .
اعلان فرمان برقرارشده و متغیر
PS2
نیزبرای فرمانهای چند خطی فعال است به طور معمول مقدار این متغیر “>” میباشد. همچنین این اعلان را موقعی دریافت میکنید که Bash فکر میکند فرمان ناتمامی را وارد نمودهاید. به عنوان مثال، وقتی علامت نقلقولی را از قلم انداختهاید، ساختار دستور نمیتواند تمام شده تلقی گردد و غیره.با استفاده از دستور readline، دستورات پیشفرض خواندن از خط فرمان هستند .
Bash به جای خروج فوری به مجرد دریافت EOF ( انتهای فایل )، گزینه
ignoreeof
شل را تفسیر میکند.به طور پیشفرض تاریخچه فرمان و بسط تاریخچه فعال است وقتی شل خاتمه مییابد، تاریخچه فرمان را در فایلی به نام
HISTFILE
ذخیره میکند. به طور پیشفرض، فایلHISTFILE
به فایل~/.bash_history
اشاره دارد .بسط نامهای مستعار فعال است.
در غیبت trap ها، سیگنال
SIGTERM
چشمپوشیشده است.در غیبت trap ها، سیگنال
SIGINT
گرفته میشود و به کارمیرود. به این معنی که مثلاً Ctrl+C موجب خروج از شل محاورهای شما نمیشود.ارسال سیگنالهای
SIGHUP
به تمام jobها درهنگام خروج، با گزینهhuponexit
تنظیم گردیده.دستورات به محض خواندن، اجرا میشوند.
Bash بهطور متناوب mail را بررسی میکند.
میتوان Bash را برای خروج، در صورت رویارویی با متغیرهای بدون مرجع پیکربندی نمود. در وضعیت محاورهای این رفتار غیر فعال است.
وقتی دستورات داخلی شل با تغییر جهت خطاها روبرو شوند، این موضوع باعث خروج شل نميگردد.
خطاهای بازگشتی دستورات داخلی ویژهای که در وضعیت POSIX به کار رفتهاند، باعث خروج شل نمیشوند، دستورات داخلی در بخشی به نام دستورات داخلی شل لیست شدهاند.
بادرماندگی فرمان exec شل خارج نمیشود.
خطاهای دستور زبانی تجزیه کننده سبب خروج شل نمیشوند.
به طور پیشفرض، کنترل ساده املا شناسههای(arguments) دستور داخلی cd فعال است.
خروج خودکار پس از سپری شدن طول مدت تعیین شده در متغیر
TMOUT
فعال است.
اطلاعات اضافی:
بخشی با عنوان “ متغیرها ”
قسمتی به نام “ گزینه های بیشتر Bash ”
برای اطلاعات بیشتر درمورد سیگنال ها فصل ۱۲, گرفتن سیگنال ها را ملاحظه نمایید.
بخشی تحت عنوان “بسط در شل” بسط های مختلف انجام شده روی یک دستور وارده را مورد بحث قرار میدهد.
عبارت های شرطی توسط دستور مرکب [[ و دستور test و دستور داخلی [ استفاده میشوند.
عبارتهای شرطی ممکن است یگانه یا دوگانه باشند . عبارتهای یگانه اغلب برای امتحان کردن وضعیت یک فایل به کار میروند. شما فقط به یک چیز برای انجام عملیات نیاز دارید، مثلاً یک فایل.
بعلاوه عملگرهای مقایسه اعداد و رشتهها نیز وجود دارند، اینها عملگرهای دوگانه هستند و به دو چیز، برای عمل کردن نیاز دارند. اگر شناسه FILE
یکی ازشناسههای اصلی به شکل /dev/fd/N
باشد، آن وقت توصیفگر فایل N بررسی میشود. اگر شناسه FILE
یکی ازموارد /dev/stdin
, /dev/stdout
یا /dev/stderr
باشد، در آن صورت توصیفگر فایل 0, 1 یا 2 به ترتیب بررسی میشوند.
شرطیها به طور مفصل در فصل ۷ , دستورات شرطی بحث میشوند.
اطلاعات بیشتر در مورد توصیف گرهای فایل در بخشی به نام “ تغییر مسیر و توصیفگرهای فایل” .
شل ارزیابی عبارتهای حسابی را به عنوان یکی از بسط های شل، ویاتوسط دستور داخلی let ، ممکن میسازد.
ارزیابی با اعدادصحیح با طول ثابت و بدون بررسی سرریز انجام میگیرد، باوجود این تقسیم بر صفر محبوس(trap) میشود و به صورت خطا نشان داده میشود. عملگرها وحق تقدم آنها و شرکت پذیریشان همان طور است که در زبان C میباشد ، فصل ۳ , محیط Bash را ملاحظه کنید.
مستعارها امکان جانشینی یک رشته توسط یک کلمه را فراهم میکنند، به طوریکه آن کلمه میتواند به عنوان یک دستور ساده به کارگرفته شود. شل لیستی از مستعارها را که میتوانند با دستور alias برقرار و با دستور unalias عزل شوند، نگهداری میکند.
Bash همواره حداقل یک سطر کامل ورودی را قبل ازانجام هر عملی، روی آن سطر، میخواند. وقتی دستور خوانده شد، مستعارها بسط داده میشوند، نه وقتی که اجرا میشود. بنابراین تعریف مستعاری که در سطری با دستور دیگر ظاهر میشود ،تا موقع خواندن سطر بعدی مؤثر واقع نمیشود .دستوری که بعد ازتعریف مستعار در همان سطر آمده از این مستعار اثر نمیپذیرد.
مستعارهاوقتی تعریف تابع خوانده میشود، بسط داده میشوند، نه موقعی که تابع اجرا میشود، چونکه تعریف تابع خود یک دستور مرکب است. در نتیجه مستعار تعریف شده در یک تابع قبل از این که آن تابع اجرا شده باشد در دسترس نیست.
ما مستعار ها را به تفصیل در بخشی به نام «مستعارها» بحث خواهیم نمود.
Bash متغیرهای آرایهای یک بعدی را فراهم نموده است .یک متغیر میتواند به عنوان یک آرایه استفاده شود، دستور داخلی declare به سادگی یک آرایه را تعریف میکند . محدودیت حداکثر اندازه برای یک آرایه وجود ندارد، احتیاجی نیست عضوها شاخص گذاری شده باشند یا به طور پیوسته تخصیص یافته باشند. اندیس آرایه ها از صفر شروع میشود. فصل ۱۰ ، بیشتر در باره متعیرها را ببینید.
پشته دایرکتوری لیستی از دایرکتوریهای اخیراً رؤیت شده میباشد. دستور داخلی pushd دایرکتوریها را پس از تغییر دایرکتوری جاری، به پشته اضافه میکند، ودستور داخلی popd دایرکتوری معین شده را از پشته حذف کرده و دایرکتوری جاری را به دایرکتوری حذف شده تغییر میدهد.
محتویات پشته را میتوان با صدور دستور dirs یا با بررسی محتویات متعیر DIRSTACK
نمایش داد.
اطلاعات بیشتر در مورد کارکرد این مکانیسم را میتوان در صفحههای info یافت.
وقتی با rbash یا با گزینه --restricted
یا -r
فراخوانی میشود، موارد زیر اتفاق میافتد:
دستور داخلی cd غیر فعال است.
کار گذاشتن و از کار انداختن متغیرهای
SHELL
،PATH
،ENV
یاBASH_ENV
امکانپذیر نمیباشد.نامهای فرمان نمیتوانند شامل /باشند.
نام فایلها نمیتواند شامل / یا .، دستور داخلی (source) باشد.
استفاده از تغییر مسیر خروجی > ، >| ، >< ، >& ، &> ، >> غیرفعال است.
دستور داخلی exec غیر فعال است.
گزینه های
-f
و -d
برای دستور داخلی enable غیر فعال میباشند.یک
PATH
پیشفرض، با فرمان داخلی command نمیتواند تعیین شود .از کار انداختن وضعیت محدودالاستعمال ممکن نمیباشد.
وقتی دستوری که شل اسکریپت شناخته شده است، اجرا شود، rbash تمام محدودیتها را، در شل تولید شده برای اجرای اسکریپت، متوقف میکند.
اطلاعات بیشتر:
→ →
تغییر مسیر پیشرفته: بخشی به نام «تغییر مسیر و توصیفگرهای فایل»