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

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

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

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

اشکالزدایی اسکریپت‌های Bash

اشکالزدایی در تمام اسکریپت

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

این اسکریپت ‎commented-script1.sh‎ است که در وضعیت اشکال‌یابی اجرا گردیده. دوباره توجه داشته باشید که توضیحات در خروجی اسکریپ مشاهده نمی‌شوند.

willy:~/scripts> bash -x script1.sh
+ clear

+ echo 'The script starts now.'
The script starts now.
+ echo 'Hi, willy!'
Hi, willy!
+ echo

+ echo 'I will now fetch you a list of connected users:'
I will now fetch you a list of connected users:
+ echo

+ w
  4:50pm  up 18 days,  6:49,  4 users,  load average: 0.58, 0.62, 0.40
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
root     tty2     -                Sat 2pm  5:36m  0.24s  0.05s  -bash
willy	 :0       -                Sat 2pm   ?     0.00s   ?     -
willy	 pts/3    -                Sat 2pm 43:13  36.82s 36.82s  BitchX willy ir
willy    pts/2    -                Sat 2pm 43:13   0.13s  0.06s  /usr/bin/screen
+ echo

+ echo 'I'\''m setting two variables now.'
I'm setting two variables now.
+ COLOUR=black
+ VALUE=9
+ echo 'This is a string: '
This is a string:
+ echo 'And this is a number: '
And this is a number:
+ echo

+ echo 'I'\''m giving you back your prompt now.'
I'm giving you back your prompt now.
+ echo

اکنون یک اشکالزدای تکامل یافته برای Bash در آدرس sourceforge در دسترس می‌باشد. این ویژگی‌های اشکالزدایی در اکثر نگارش‌های مدرن Bash پس از نسخه ۳ معتبر است .

اشکالزدایی در بخشی از اسکریپت

بااستفاده از دستور داخلی set در Bash می‌توانید، قسمت‌هایی از اسکریپت را که از کارکرد بدون اشکال آن‌ها اطمینان دارید، در وضعیت عادی اجرا کنید، وفقط اطلاعات اشکال‌یابی منطقه دردسر دهنده را نمایش دهید. فرض کنید مطمئن نیستیم فرمان w در مثال ‎ commented-script1.sh ‎ ،چه کار انجام خواهد داد، در آن صورت می‌توانیم آن‌را در اسکریپت اینطور محصور کنیم:

set -x			# activate debugging from here
w
set +x			# stop debugging from here

سپس خروجی به این شکل خواهد بود:

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

I will now fetch you a list of connected users:

+ w
  5:00pm  up 18 days,  7:00,  4 users,  load average: 0.79, 0.39, 0.33
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
root     tty2     -                Sat 2pm  5:47m  0.24s  0.05s  -bash
willy    :0       -                Sat 2pm   ?     0.00s   ?     -
willy    pts/3    -                Sat 2pm 54:02  36.88s 36.88s  BitchX willyke
willy    pts/2    -                Sat 2pm 54:02   0.13s  0.06s  /usr/bin/screen
+ set +x

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

I'm giving you back your prompt now.

willy: ~/scripts>

میتوانید در طول همان اسکریپت هر چند بار که بخواهید وضعیت اشکال‌یابی را روشن و خاموش کنید.

جدول زیر خلاصه‌ای از سایر گزینه‌های سودمند Bash می‌باشد:

جدول  2.1. خلاصه از گزینه‌های اشکال‌یابی

نماد کوتاهنماد بلندنتیجه
set -fset -o noglobایجاد نام فایل با استفاده از فوق کاراکتر ها(globbing) غیر فعال می‌شود .
set -vset -o verboseسطرهای ورودی شل را هنگامی‌که خوانده می‌شوند، چاپ می‌کند.
set -xset -o xtraceهر سطر را قبل از اجرا چاپ می‌کند.

خط تیره برای فعال کردن گزینه شل استفاده شده است و علامت بعلاوه برای غیر فعال کردن آن. سر درگم نشوید!

در مثال زیر، این گزینه‌ها را در خط فرمان نمایش داده‌ایم:

willy:~/scripts> set -v

willy:~/scripts> ls
ls 
commented-scripts.sh	script1.sh

willy:~/scripts> set +v
set +v

willy:~/scripts> ls *
commented-scripts.sh    script1.sh

willy:~/scripts> set -f

willy:~/scripts> ls *
ls: *: No such file or directory

willy:~/scripts> touch *

willy:~/scripts> ls
*   commented-scripts.sh    script1.sh

willy:~/scripts> rm *

willy:~/scripts> ls
commented-scripts.sh    script1.sh

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

#!/bin/bash -xv

وقتی که اشکالی در قسمتی از اسکریپت می‌یابید، می‌توانید دستور echo را قبل از هر فرمانی که از آن مطمئن نیستید، اضافه کنید، برای اینکه،به طور دقیق خواهید دید که امور، کجا وچرا کار نمی‌کنند. در اسکریپت نمونه ‎commented-script1.sh‎ می‌تواند به این شکل انجام شود:

echo "debug message: now attempting to start w command"; w

در اسکریپت‌های پیش‌رفته‌تر دستور echo می‌تواند برای نمایش محتوای متغیرها درمراحل متفاوت در اسکریپت، به طوری‌که نقص‌ها شناخته شوند، درج شود:

echo "Variable VARNAME is now set to $VARNAME."
مبانی اسکریپت  »
«  خلاصه
ترجمه محمود پهلوانی