انواع دستورات
BASH چند نوع مختلف از دستورات را شناسایی میکند: مستعارها، توابع، دستورات داخلی، کلمات کلیدی، و اجراییها.
مستعارها: مستعارها روشی برای کوتاه نمودن دستورات است. اینها فقط در پوستههای محاورهای به کار میروند، نه در اسکریپتها. ( این یکی از معدود تفاوتهای یک اسکریپت و یک پوسته محاورهای میباشد.) مستعار یک نام کوتاه شده برای یک رشته معین است. موقعی که آن نام به عنوان یک دستور استفاده شود، قبل از اینکه فرمان اجرا گردد، نام با رشته جایگزین میگردد. بنابراین به جای آن اجرا میگردد:
$ nmap -P0 -A --osscan_limit 192.168.0.1
میتوانید از یک مستعار به این شکل استفاده کنید:
$ alias nmapp=\'nmap -P0 -A --osscan_limit\' $ nmapp 192.168.0.1
قدرت مستعارها محدود است، جایگزینی فقط در اولین کلمه رخ میدهد. اگر قابلیت انعطاف بیشتری میخواهید، از یک تابع استفاده کنید. مستعارها فقط به عنوان میانبرهای متنی مفید میباشند.
توابع : توابع در BASH چیزی مشابه مستعارها هستند، اما قدرتمندتر. بر خلاف مستعارها، توابع میتوانند در اسکریپتها به کار بروند. یک تابع محتوی فرمانهای پوسته است، بسیار زیاد مانند یک اسکریپت کوچک، حتی میتوانند شناسهها را قبول کنند و متغیرهای محلی ایجاد کنند. وقتی یک تابع فراخوانده میشود، دستورات داخل آن اجرا میشوند. توابع به طور کاملتری بعداً در این راهنما پوشش داده میشوند.دستورات داخلی: BASH تعدادی دستور اصلی در ساختمان خودش دارد، از قبیل cd (تغییر دایرکتوری)، echo (نوشتن خروجی)، وغیره. میتوانید آنها را به عنوان توابعی که از قبل فراهم شدهاند در نظر بگیرید.
کلمات کلیدی: کلمههای کلیدی کاملاً مانند دستورات داخلی میباشند، فقط اختلاف اصلی آنها درقواعد تجزیه ویژه در نظر گرفته شده برای آنها میباشد. برای مثال، [ یک دستور داخلی است، در حالیکه
[[ یک کلمه کلیدی است. هر دو برای بررسی موضوعات به کار میروند، اما چون [[ یککلمه کلیدی است تا فرمان داخلی، این کلمه کلیدی از چند قاعده ویژه تجزیه سود میبرد که کاربرد آن را آسانتر میسازد:$ [ a
< b ]-bash: b: No such file or directory $[[ a< b ]] مثال اول یک خطا باز میگرداند، زیرا bash سعی میکند فایل b را به دستور [ a ] تغییر مسیر بدهد(بخش تغییر مسیر فایل را ملاحظه کنید) مثال دوم به طور واقعی آنچه شما انتظار دارید انجام میدهد. کاراکتر
< وقتی که با یک فرمان [[ به کار میرود، دیگر معنی خاص عملگرتغییر مسیر را ندارد.اجراییها: آخرین نوع دستوری که میتواند توسط bash اجرا بشود، یک دستور اجرایی است، که همچنین یک دستور خارجی یا برنامهکاربردی نیز نامیده میشود. اجراییها با استفاده از نام مسیر فراخوانی میشوند. اگر فایل اجرایی در دایرکتوری جاری است، به صورت
./ myprogram به کار ببرید. اگر در دایرکتوری /usr/local/bin است، از /usr/local/bin/myprogram استفاده کنید.برای اندکی آسانتر نمودن زندگی شما، بههرحال، BASH از متغیری استفاده میکند، که بگوید در مواقعی که شما فقط نام برنامه کاربردی را میدانید و نه نام مسیرکامل آنرا، در کجا برنامه را پیدا کند. این متغیر
PATH نام دارد، ومجموعهای از نام مسیرهای دایرکتوری است که با کاراکتر کولن از هم جدا شدهاند-- به عنوان مثال /bin موقعی که یک فرمان بدون نام مسیر در BASH مشخص میشود ( مثل myprgram، یا ls)، و یک مستعار، تابع، کلمه کلیدی یا دستور داخلی نباشد BASH در میان دایرکتوریهای: /usr/binPATH به ترتیب از چپ به راست آنرا جستجو میکند، که ببیند آیا آنها دارای فایل اجرایی با نامی که تایپ کردهاید، هستند.
نکته:
میتوانید از فرمان type برای پیبردن به نوع یک فرمان استفاده کنید.
به عنوان مثال:
$ type rmrm is hashed (/bin/rm) $ type cdcd is a shell builtin
در مستندات گنو: دستورات ساده
در پرسش و پاسخهای رایج:
تفاوت بین test و [ و [[ چیست؟
چگونه میتوانم مستعاری ایجاد کنم که یک شناسه دریافت کند؟
مستعارها: یک نام که به یک رشته نسبت داده شده است. موقعی که نام به عنوان یک فرمان به کار برود، با رشته نسبت داده شده تعویض میگردد.
تابع: یک نام که به یک مجموعه از دستورات نسبت داده شده است . وقتی که نام به عنوان یک دستور استفاده شود، تابع با شناسههای به کار رفته در خطفرمان ، فراخوانی میشود. توابع روش اصلی برای ایجاد فرمانهای جدید هستند.
دستورات داخلی: فرمانهای معینی که در داخل BASH ساخته شدهاند. اینها موقعی که در خطفرمان اجرا شوند به طور داخلی اجرا میشوند( و پردازش جدیدی ایجاد نمیکنند ).
برنامههای کاربردی: یک برنامه که میتواند با ارجاع به نام مسیر آن اجرا شود(
/bin/ls )، و یا اگر محل استقرار آن در متغیرPATH شما وجود دارد، با نام آن اجرا گردد.