راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

Bash و اسکریپت‌های Bash ، فصل ۱ »
«  اجرای فرمان ها

برتری‌های Bourne Again SHell

Bash شل گنو است

پروژه گنو ‎(GNU's Not UNIX)‎ ابزارها و نرم‌افزارهای آزاد و کاملا سازگار با یونیکس را برای مدیران سیستم‌های مبتنی بر یونیکس، فراهم می‌کند.

Bash شل سازگار با sh می‌باشد، که ویژگی های سودمند شل‌های، کورن (ksh) و سی‌شل (csh) را با آن درهم آمیخته است. علاقمند به سازگاری با شل استاندارد ‎ IEEE POSIX P1003.2/ISO 9945.2‎، و ابزارهای استاندارد می‌باشد. اصلاح وبهسازی کارآمدی بر sh هم برای برنامه‌نویسی، هم در استفاده محاوره‌ای، ارائه می‌نماید، این‌ها عباتند از، ویرایش دستورات خط فرمان، اندازه نامحدود تاریخچه خط فرمان، کنترل job، توابع شل و مستعارها، آرایه‌های با اندازه نامحدود، و محاسبات اعداد صحیح در هر پایه‌ای، از مبنای ۲ تا ۶۴ . Bash اکثر اسکریپت‌های sh را بدون نیاز به ویرایش اجرا می‌کند.

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

ویژگی‌هایی که فقط در Bash یافت می‌شود

احضار

علاوه بر گزینه‌های یک کاراکتری خط فرمان شل، که عموماً می‌توانند با فرمان‌ داخلی، set شل، تنظیم شوند، تعدادی گزینه چندکاراکتری نیز وجود دارند، که می‌توانید به کار ببرید. با تعدادی ازگزینه‌های رایح‌تر در این فصل و فصل‌های بعدی برخورد خواهیم کرد، لیست کامل آن‌ها را می‌توان در صفحات info یافت، ‎ Bash features → Invoking Bash‎ .

فایل‌های شروع Bash

فایل‌های Startup اسکریپت‌هایی می‌باشند، که Bash موقع شروع به کار آن‌ها را می‌خواند و اجرامی‌نماید .بخش‌های فرعی زیر روش‌های مختلف آغاز به کار شل، و در نتیجه فایل‌های startup خوانده شده را، توضیح می‌دهند.

احضار یک شل محاوره‌ای ورود به سیستم ( login)، یا احضار با گزینه '‎--login‎'

محاوره‌ای یعنی شما می‌توانید دستورات را وارد کنید. یک شل login (ورود به سیستم )، یعنی شما پس از شناسایی توسط سیستم، که معمولاً با دریافت نام کاربری و کلمه عبور صورت می‌گیرد، یک شل دریافت می‌کنید.

فایل‌های خوانده شده :

  • ‎/etc/profile‎

  • ‎~/.bash_profile‎, ‎~/.bash_login‎ یا ‎~/.profile‎ : اولین فایل موجود قابل خواندن، خوانده می‌شود

  • ‎~/.bash_logout‎به مجرد خروج خوانده می‌شود .

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

احضار شل محاوره‌ای بدون login

شل بدون login یعنی لازم نیست که شما توسط سیستم شناسایی بشوید. به عنوان مثال، موقعی که با یک آیکون یا موردی از یک منو، ترمینالی را باز می‌کنید، این یک شل بدون login است.

فایل‌های خوانده شده :

  • ‎~/.bashrc‎

این فایل به طور معمول به فایل ‎  ~/.bash_profile‎رجوع می‌کند :

‎if [ -f ~/.bashrc ]; then . ~/.bashrc; fi‎

فصل ۷, جملات شرطی را برای اطلاعات بیشتر در باره ساختار if ملاحظه کنید.

احضار به صورت غیر محاوره‌ای

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

فایل‌های خوانده شده :

  • تعریف شده در فایل BASH_ENV

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

احضار با دستور sh

Bash سعی می‌کند در حالیکه به خوبی با استاندارد POSIX مطابقت می‌نماید ، همانند برنامه بورن sh تاریخی رفتار نماید.

خواندن فایل ها :

  • ‎/etc/profile‎

  • ‎~/.profile‎

وقتی به طور غیرمحاوره‌ای احضار می‌شود، متغیر ENV می‌تواند به اطلاعات اضافی شروع اولیه ( startup ) اشاره کند .

در وضعیت POSIX

این حالت هم با استفاده از دستور داخلی set فعال می‌شود :

set -o posix

هم در فراخوانی برنامه bash با استفاده از گزینه ‎--posix‎ . سپس Bash سعی می‌کند، تا آن جا که برای شل‌ها ممکن است موافق با استاندارد POSIX رفتار کند . برقرار کردن متغیر POSIXLY_CORRECT نیز همان کار را انجام می‌دهد .

خواندن فایل‌ها :

  • توسط متغیر ENV تعیین می‌شود .

احضار از راه دور

فایل‌های خواندنی موقعی که پوسته توسط rshd احضار می‌شود :

  • ‎~/.bashrc‎

[Warning]اجتناب از ابزارهای r

ازخطرات کاربرد ابزارهایی همچون rlogin ، telnet ، rsh و rcp آگاه باشید. آن ها فی نفسه ناامن هستند، زیرا اطلاعات محرمانه را به صورت متن رمز نشده در شبکه ارسال می‌کنند. اگر به اجرای راه دور مثل انتقال فایل و مشابه آن نیاز دارید، از پیاده سازی شل امن (Secure SHell ) که معمولاً SSH نامیده می‌شود، استفاده کنید، از طریق ‎http://www.openssh.org‎ به طور آزاد در دسترس می‌باشد. برنامه های سرویس گیرنده متمایزی هم برای سیستم های غیر یونیکسی در دسترس است، به آرشیو نرم‌افزارهای منطقه خودتان نگاه کنید.

احضار در موقعی که UID برابر با EUID نمی‌باشد

فایل‌های‌درآغاز‌اجرا‌شونده‌ای در این حالت خوانده نمی‌شود.

شل‌های محاوره‌ای

شل محاوره‌ای چیست؟

یک شل محاوره‌ای در حالت عادی از ورودی متصل به ترمینال کاربری می‌خواند و در خروجی متصل به آن می‌نویسد. رفتار فعل و انفعالی 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 را ملاحظه کنید.

Aliases

مستعارها امکان جانشینی یک رشته توسط یک کلمه را فراهم می‌کنند، به طوری‌که آن کلمه می‌تواند به عنوان یک دستور ساده به کارگرفته شود. شل لیستی از مستعارها را که می‌توانند با دستور alias برقرار و با دستور unalias عزل شوند، نگهداری می‌کند.

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

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

ما مستعار ها را به تفصیل در بخشی به نام «مستعارها» بحث خواهیم نمود.

آرایه‌ها

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

پشته کردن دایرکتوری

پشته دایرکتوری لیستی از دایرکتوری‌های اخیراً رؤیت شده می‌باشد. دستور داخلی pushd دایرکتوری‌ها را پس از تغییر دایرکتوری جاری، به پشته اضافه می‌کند، ودستور داخلی popd دایرکتوری معین شده را از پشته حذف کرده و دایرکتوری جاری را به دایرکتوری حذف شده تغییر می‌دهد.

محتویات پشته را می‌توان با صدور دستور dirs یا با بررسی محتویات متعیر DIRSTACK نمایش داد.

اطلاعات بیشتر در مورد کارکرد این مکانیسم را می‌توان در صفحه‌های info یافت.

اعلان فرمان

Bash حتی کار با اعلان فرمان را مطبوع‌تر می‌سازد. بخش کنترل اعلان فرمان در صفحه‌های info را ببینید.

شل محدود شده

وقتی با rbash یا با گزینه ‎ --restricted‎ یا ‎-r‎ فراخوانی می‌شود، موارد زیر اتفاق می‌افتد:

  • دستور داخلی cd غیر فعال است.

  • کار گذاشتن و از کار انداختن متغیرهای SHELL ، PATH ، ENV یا BASH_ENV امکان‌پذیر نمی‌باشد.

  • نام‌های فرمان نمی‌توانند شامل /باشند.

  • نام فایل‌ها نمی‌تواند شامل / یا .، دستور داخلی (source) باشد.

  • دستور داخلیhash باگزینه ‎ -p‎، / ها را نمی‌پذیرد.

  • وارد کردن توابع در فایل‌های شروع اولیه غیر فعال است.

  • SHELLOPTSدر فایل شروع اولیه چشم پوشی می‌شود.

  • استفاده از تغییر مسیر خروجی ‎ >‎ ، ‎>| ‎ ، ‎ ><‎ ،‎ >&‎ ، &>‎ ، ‎ >>‎ غیرفعال است.

  • دستور داخلی exec غیر فعال است.

  • گزینه ‌های‎ -f ‎ و ‎ -d‎ برای دستور داخلی enable غیر فعال می‌باشند.

  • یک PATH پیش‌فرض، با فرمان داخلی command نمی‌تواند تعیین شود .

  • از کار انداختن وضعیت محدودالاستعمال ممکن نمی‌باشد.

وقتی دستوری که شل اسکریپت شناخته شده است، اجرا شود، rbash تمام محدودیت‌ها را، در شل تولید شده برای اجرای اسکریپت، متوقف می‌کند.

اطلاعات بیشتر:

  • بخشی به نام «متغیرها»

  • بخشی به نام «گزینه‌های بیشترBash »

  • Info Bash → Basic Shell Features → Redirections

  • تغییر مسیر پیشرفته: بخشی به نام «تغییر مسیر و توصیف‌گرهای فایل»

Bash و اسکریپت‌های Bash ، فصل ۱ »
«  اجرای فرمان ها
ترجمه محمود پهلوانی