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

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

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

تمرین ها »
« مبانی اسکریپت

فصل ۲ : نوشتن و اشکالزدایی اسکریپت ها

فهرست مندرجات

ایجاد و اجرای یک اسکریپت
نوشتن و نامیدن
script1.sh
اجرای اسکریپت
مبانی اسکریپت
کدام شل ، اسکریپت را اجرامی‌کند؟
افزودن توضیحات
اشکالزدایی اسکریپت‌های Bash
اشکالزدایی تمام اسکریپت
اشکالزدایی قسمتی از اسکریپت
خلاصه
تمرین ها

چکیده

پس ازمطالعه این فصل، قادر خواهید بود :

  • یک اسکریپت ساده بنویسید

  • تعیین نوع پوسته‌ای که که باید اسکریپت را اجرا کند

  • در اسکریپت توضیحات قرار دهید

  • مجوزهای اسکریپت را تغییر بدهید

  • اسکریپت را اجرا و اشکالزدایی کنید

ایجاد و اجرای یک اسکریپت

نوشتن و نامیدن

اسکریپت شل، یک توالی از دستورات است که شما به طور مکرر استفاده می کنید. این توالی به طور نوعی با وارد کردن نام اسکریپت در خط فرمان، اجرا می‌شود. به طور جایگزین، می‌توانیداز اسکریپت‌ها، با استفاده از امکان cron، وظایف را خودکار نمایید. استفاده دیگر از اسکریپت، در فرایند بالا آمدن (boot) و خاموشی (shutdown) سیستم یونیکس است، جایی که عملیات برنامه های کمکی و سرویس ها در اسکریپت‌های init تعیین می‌شوند .

برای ایجاد اسکریپت شل، یک فایل جدید در ویرایشگر خود باز نمایید. باهر ویرایشگر متن قابل انجام است: vim ، emacs ، gedit ،dtpad وغیره، همه معتبر هستند. ممکن است شما بخواهید از ویرایشگر پیشرفته‌تری مثل vim یا emacs استفاده کنید، چون این‌ها می‌توانند برای تشخیص دستور زبان Bash پیکربندی بشوند، که مساعدت بزرگی در جلوگیری از اشتباهاتی که تازه کارها خیلی اوقات مرتکب می‌شوند، می‌باشد، مانند فراموش کردن براکت‌ها و سمی کالن‌ها.

[Tip]روشن کردن دستور زبان در vim

به منظور فعال سازی جلوه نمودن دستور زبان در vim ، از دستور

:syntax enable

یا

:sy enable

یا

:syn enable

استفاده کنید . می‌توانید این تنظیمات را با افزودن به فایل ‎ .vimrc‎ دائمی کنید .

دستورات یونیکس را در فایل جدید درج کنید، همان‌طور که آن ها را در خط فرمان وارد می‌کنید. به طوری که در فصل قبل بحث شد ( بخشی به نام « اجرای دستورات » را ببینید )، دستورات می‌توانند توابع شل، دستورات داخلی شل، فرمان‌های یونیکس وسایر اسکریپت‌ها باشند .

یک نام قابل درک به اسکریپت خود بدهید ،که اشاره‌ای به آنچه اسکریپت انجام می‌دهد داشته باشد . مطمئن شوید که نام اسکریپت با فرمان‌های موجود تداخل نمی‌کند . به منظور اطمینان از آن که موجب سردرگمی نخواهد شد، نام اسکریپت‌ها اغلب به ‎.sh ‎ ختم می‌شود، هنوز، امکان دارد اسکریپت‌های دیگری در سیستم شمابا همان نام انتخابی شما وجود داشته باشد. با استفاده از دستور which ، whereis و سایر فرمان‌های جستجوکننده اطلاعات در مورد برنامه ها وفایل‌ها، بررسی کنید:

which -a script_name

whereis script_name

locate script_name

script1.sh

در این مثال دستور داخلی echoی Bash قبل از انجام ماموریتی که خروجی را تولید خواهد نمود، به کاربر اطلاع می‌دهد که چه اتفاقی رخ خواهد داد. آگاهی کاربران در باره آنچه اسکریپت انجام می‌دهد، شدیداً توصیه گردیده است، برای جلوگیری از عصبیت آنها به سبب آن که اسکریپت هیچ کاری انجام نمی‌دهد! ما به موضوع اطلاع رسانی به کاربر در فصل ۸ ،نوشتن اسکریپت‌های فعل و انفعالی باز خواهیم گشت .

شکل  2.1 :  script1.sh

Example script using statements like "echo hello", "echo hello $USER" and "VARIABLE=value".

این اسکریپت را نیز برای خود بنویسید. شاید، ایده خوبی باشد که، یک دایرکتوری ‎ ~/scripts‎ برای نگهداری اسکریپت‌های خود ایجاد کنید. دایرکتوری را به محتوای متغیر PATH اضافه کنید :

export PATH="$PATH:~/scripts"

اگر کار با Bashرا تازه شروع کرده‌اید، از یک ویرایشگر متن که رنگ‌های متفاوت برای ساختارهای مختلف شل به کار می‌برد، استفاده کنید. روشن کردن دستورزبان توسط vim ، gvim ، ‎(x)emacs‎ ، kwrite و بسیاری ویرایشگرهای دیگر پشتیبانی می‌شود، مستندات ویرایشگر مطلوب خود را ملاحظه کنید.

[Note]   اعلان فرمان‌های متفاوت

امروزه اعلان‌ها به نسبت حوصله مؤلفین آن‌هامتنوع هستند. این بیشتر به حالات زندگی واقعی شباهت دارد تا اعلان استاندارد آموزشی $ .تنها قاعده‌ای که به آن پایبند می‌مانیم آن است که اعلان فرمان root به علامت ‎ hash (#)‎ ختم می‌شود.

اجرای اسکریپت

اسکریپت جهت قابل اجرا بودن، باید دارای مجوز های صحیح اجرا برای دارندگان باشد. وقتی مجوزها را تنظیم می‌کنید،کنترل کنید که واقعاًمجوزهایی که می‌خواهید بدست آورده باشید. موقعی که این کار انجام شود، اسکریپت می‌تواند همانند هر دستور دیگر اجرا شود:

willy:~/scripts> chmod u+x script1.sh

willy:~/scripts> ls -l script1.sh
-rwxrw-r--    1 willy	willy		456 Dec 24 17:11 script1.sh

willy:~> script1.sh
The script starts now.
Hi, willy!

I will now fetch you a list of connected users:

  3:38pm  up 18 days,  5:37,  4 users,  load average: 0.12, 0.22, 0.15
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
root     tty2     -                Sat 2pm  4:25m  0.24s  0.05s  -bash
willy	 :0       -                Sat 2pm   ?     0.00s   ?     -
willy    pts/3    -                Sat 2pm  3:33m 36.39s 36.39s  BitchX willy ir
willy    pts/2    -                Sat 2pm  3:33m  0.13s  0.06s  /usr/bin/screen

I'm setting two variables now.
This is a string: black
And this is a number: 9

I'm giving you back your prompt now.

willy:~/scripts> echo $COLOUR

willy:~/scripts> echo $VALUE

willy:~/scripts>

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

اگر دایرکتوری اسکریپت‌ها را در PATH خود قرار ندهید، و . (دایرکتوری جاری ) هم در PATH نیست، می‌توانید اسکریپت را به این طریق اجرا کنید:

./script_name.sh

یک اسکریپت همچنین می‌تواند مشخصاً توسط یک شل تعیین شده، اجرا شود، اما به طور معمول فقط موقعی این کار را انجام می‌دهیم که بخواهیم رفتار خاصی حاصل شود، ازجمله، این‌که آیا اسکریپت در شل دیگری، کار می‌کند، یا چاپ سطر به سطر اجرا، برای اشکالزدایی:

rbash script_name.sh

sh script_name.sh

bash -x script_name.sh

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

اگر می‌خواهید شل جدیدی شروع نشود، اما اسکریپت در شل جاری اجرا شود، آن را source کنید :

source script_name.sh

[Tip]‎source = .‎

دستور داخلی source در Bash مترادف فرمان . (dot) در شل بورن است.

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

willy:~/scripts> source script1.sh
--output ommitted--

willy:~/scripts> echo $VALUE
9

willy:~/scripts>
تمرین ها »
« مبانی اسکریپت
ترجمه محمود پهلوانی