یک اسکریپت در حقیقت لیستی از دستورات هست که در یک فایل ذخیره شده اند. به جای اجرا کردن ترتیبی از دستورات با تایپ کردن یکی به یکی آنها در ترمینال، یک کاربر سیستمی میتواند همه این کامند ها را در یک فایل ذخیره کند و به صورت مکرر آن فایل را برای اجرا کردن دستورات مورد نظر در چندین زمان متفاوت استفاده کرد.
در ابتدا برای یادگیری آموزش شل اسکریپت یا در طول مراحل ابتدایی نوشتن اسکریپت ها ما معمولا نوشتن اسکریپت را با موارد کوتاه یا کوچک با تعداد کمی خط از دستورات شروع میکنیم. و معمولا این چنین اسکریپت ها را بدون انجام هیچ کاری و تنها با نگاه کردن در خروجی آنها و اطمینان از اینکه آنها همانطور که ما میخواهیم کار میکنند، دیباگ میکنیم.
به هر حال زمانیکه شروع میکنیم به نوشتن اسکریپت های پیشرفته و خیلی طولانی با هزاران خط کامند (به طور مثال اسکریپت هایی که تنظیمات سیستمی را تغییر میدهند، بک آپ های حیاتی را از بستر شبکه انجام میدهند و موارد بیشمار دیگر) متوجه خواهیم شد که تنها بررسی خروجی اسکریپت برای یافتن باگ های درون یک اسکریپت کافی نیست.
بنابراین در این مقاله در مورد debuging شل اسکریپت، ما درباره نحوه فعال کردن دیباگ shell script و همچنین توضیح مدهای متفاوت دیباگ شل اسکریپت و نحوه استفاده آنها به ترتیب بحث خواهیم کرد.
همچنین توصیه میشود مطالعه کنید :
استفاده از شل اسکریپت برای اتوماتیک کردن Task ها در لینوکس
آموزش نحوه اجرای Trace دستورات در شل اسکریپت با استفاده از Shell Tracing
نحوه فعال کردن مد دیباگ به منظور بررسی syntax در شل اسکریپت ها
چگونگی شروع کردن یک اسکریپت
یک اسکریپت را با بقیه فایل ها به واسطه اولین خط آن میتوان تشخیص داد که شامل she-bang "#!" که نوع فایل را مشخص میکند میباشد و همچنین نام یک مسیر (مسیر مفسر فایل) که به سیستم اطلاع میدهد این فایل شامل دستوراتی است که باید توسط برنامه مشخص شده تفسیر شود.
در زیر نمونه های متفاوتی از خط اول اسکریپت ها را مشاهده مینمایید.
توجه : خط اول یا #! را میتوان در اسکریپت قرار نداد، تنها در صورتی که فایل شما شامل دستورات استاندارد سیستم بدون هیچ گونه شرط یا قواعد برنامه نویسی باشد.
نحوه اجرا کردن یک شل اسکریپت در لینوکس
ساختار ساده ی به کار گیری و اجرای یک shell script به شرح زیر میباشد.
شکل دیگر نحوه اجرای اسکریپت به واسطه مشخص کردن shell ی است که اسکریپت شما را اجرا میکند :
برای مثال :
برای اسکریپت هایی که در خط اول شان she-bang "#!" ندارند و تنها شامل دستورات سیستمی ساده و پایه میباشند همانند زیر :
به سادگی میتوانید آنها را قابل اجرا شدن بنمایید و آنها را همانند زیر اجرا کنید :
روش های فعال کردن مد Debugging شل اسکریپت
در زیر گزینه های دیباگ ابتدایی shell script را مشاهده میکنید :
-v : (مخفف verbose) که به شل اعلام میکند تمامی خطوط در یک اسکریپت را در حالی که خوانده میشوند نمایش دهد، این گزینه مد verbose را فعال میسازد.
-n : (مخفف noexec یا no execution) با استفاده از این آپشن شل تمامی دستورات را میخواند اما آنها را اجرا نمیکند. این گزینه مد بررسی syntax را فعال میکند.
-x : (مخفف xtrace یا execution trace) که به شل اعلام میکند تمامی کامندها و argument های دستورات را زمانیکه آنها در حال اجرا شدن هستند روی ترمینال نمایش دهد. این گزینه مد shell tracing را فعال میکند.
1 - تغییر اولین خط یک shell script
اولین مکانیزم با تغییر اولین خط یک شل اسکریپت است. مثال زیر دیباگ کامل اسکریپت را فعال خواهد کرد.
در مورد بالا آپشن میتواند یک یا ترکیبی از آپشن های debugging باشد.
2 - اجرا کردن Shell با آپشن Debugging
مورد دوم اجرا کردن دستور shell و همچنین گزینه های debugging همانند زیر میباشد. این روش هم دیباگ کلی اسکریپت را فعال میکند.
برای مثال :
3 - استفاده از دستور داخلی Set در Shell
سومین روش استفاده از دستور داخلی set برای دیباگ کردن یک بخش از یک شل اسکریپت همانند یک function میباشد. این مکانیزم مهم است از آنجایی که به ما اجازه میدهد debugging را در هر بخشی از shell script فعال کنیم.
ما میتوانیم مد debugging را با استفاده از دستور set و به صورت زیر فعال کنیم و به جای آپشن از هر گزینه debugging استفاده کنیم.
برای فعال کردن مد debugging از دستور زیر استفاده میکنیم.
برای غیر فعال کردن مد debugging از دستور زیر استفاده میکنیم.
علاوه بر این اگر ما چندین مد debugging را در بخش های متفاوتی از یک شل اسکریپت فعال کرده باشیم میتوانیم همه آنها را در یک لحظه و با استفاده از دستور زیر غیر فعال کنیم :
توصیه میشود مقالات زیر را هم مطالعه فرمایید :
Chaining Operators (عملگرهای زنجیره ای) در لینوکس
آموزش دستور AWK
همانطور که در بالا گفتیم ما همواره میتوانیم کل یک شل اسکریپت و یا یک بخش مشخصی از آنرا دیباگ کنیم. در دو مقاله بعد از این سری مقالات ما درباره نحوه استفاده گزینه های دیباگ شل اسکریپت به منظور توضیح verbose، بررسی syntax و مدهای دیباگ shell tracing به همراه مثال بحث خواهیم کرد.
در ابتدا برای یادگیری آموزش شل اسکریپت یا در طول مراحل ابتدایی نوشتن اسکریپت ها ما معمولا نوشتن اسکریپت را با موارد کوتاه یا کوچک با تعداد کمی خط از دستورات شروع میکنیم. و معمولا این چنین اسکریپت ها را بدون انجام هیچ کاری و تنها با نگاه کردن در خروجی آنها و اطمینان از اینکه آنها همانطور که ما میخواهیم کار میکنند، دیباگ میکنیم.
به هر حال زمانیکه شروع میکنیم به نوشتن اسکریپت های پیشرفته و خیلی طولانی با هزاران خط کامند (به طور مثال اسکریپت هایی که تنظیمات سیستمی را تغییر میدهند، بک آپ های حیاتی را از بستر شبکه انجام میدهند و موارد بیشمار دیگر) متوجه خواهیم شد که تنها بررسی خروجی اسکریپت برای یافتن باگ های درون یک اسکریپت کافی نیست.
بنابراین در این مقاله در مورد debuging شل اسکریپت، ما درباره نحوه فعال کردن دیباگ shell script و همچنین توضیح مدهای متفاوت دیباگ شل اسکریپت و نحوه استفاده آنها به ترتیب بحث خواهیم کرد.
همچنین توصیه میشود مطالعه کنید :
استفاده از شل اسکریپت برای اتوماتیک کردن Task ها در لینوکس
آموزش نحوه اجرای Trace دستورات در شل اسکریپت با استفاده از Shell Tracing
نحوه فعال کردن مد دیباگ به منظور بررسی syntax در شل اسکریپت ها
چگونگی شروع کردن یک اسکریپت
یک اسکریپت را با بقیه فایل ها به واسطه اولین خط آن میتوان تشخیص داد که شامل she-bang "#!" که نوع فایل را مشخص میکند میباشد و همچنین نام یک مسیر (مسیر مفسر فایل) که به سیستم اطلاع میدهد این فایل شامل دستوراتی است که باید توسط برنامه مشخص شده تفسیر شود.
در زیر نمونه های متفاوتی از خط اول اسکریپت ها را مشاهده مینمایید.
کد PHP:
#!/bin/sh [For sh scripting]
#!/bin/bash [For bash scripting]
#!/usr/bin/perl [For perl programming]
#!/bin/awk -f [For awk scripting]
نحوه اجرا کردن یک شل اسکریپت در لینوکس
ساختار ساده ی به کار گیری و اجرای یک shell script به شرح زیر میباشد.
کد PHP:
$ script_name argument1 ... argumentN
کد PHP:
$ shell script_name argument1 ... argumentN
کد PHP:
$ /bin/bash script_name argument1 ... argumentN [For bash scripting]
$ /bin/ksh script_name argument1 ... argumentN [For ksh scripting]
$ /bin/sh script_name argument1 ... argumentN [For sh scripting]
کد PHP:
#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"
کد PHP:
$ chmod +x script_name
$ ./script_name
روش های فعال کردن مد Debugging شل اسکریپت
در زیر گزینه های دیباگ ابتدایی shell script را مشاهده میکنید :
-v : (مخفف verbose) که به شل اعلام میکند تمامی خطوط در یک اسکریپت را در حالی که خوانده میشوند نمایش دهد، این گزینه مد verbose را فعال میسازد.
-n : (مخفف noexec یا no execution) با استفاده از این آپشن شل تمامی دستورات را میخواند اما آنها را اجرا نمیکند. این گزینه مد بررسی syntax را فعال میکند.
-x : (مخفف xtrace یا execution trace) که به شل اعلام میکند تمامی کامندها و argument های دستورات را زمانیکه آنها در حال اجرا شدن هستند روی ترمینال نمایش دهد. این گزینه مد shell tracing را فعال میکند.
1 - تغییر اولین خط یک shell script
اولین مکانیزم با تغییر اولین خط یک شل اسکریپت است. مثال زیر دیباگ کامل اسکریپت را فعال خواهد کرد.
کد PHP:
#!/bin/sh option(s)
2 - اجرا کردن Shell با آپشن Debugging
مورد دوم اجرا کردن دستور shell و همچنین گزینه های debugging همانند زیر میباشد. این روش هم دیباگ کلی اسکریپت را فعال میکند.
کد PHP:
$ shell option(s) script_name argument1 ... argumentN
کد PHP:
$ /bin/bash option(s) script_name argument1 ... argumentN
3 - استفاده از دستور داخلی Set در Shell
سومین روش استفاده از دستور داخلی set برای دیباگ کردن یک بخش از یک شل اسکریپت همانند یک function میباشد. این مکانیزم مهم است از آنجایی که به ما اجازه میدهد debugging را در هر بخشی از shell script فعال کنیم.
ما میتوانیم مد debugging را با استفاده از دستور set و به صورت زیر فعال کنیم و به جای آپشن از هر گزینه debugging استفاده کنیم.
کد PHP:
$ set option
کد PHP:
$ set -option
کد PHP:
$ set +option
کد PHP:
$ set -
توصیه میشود مقالات زیر را هم مطالعه فرمایید :
Chaining Operators (عملگرهای زنجیره ای) در لینوکس
آموزش دستور AWK
همانطور که در بالا گفتیم ما همواره میتوانیم کل یک شل اسکریپت و یا یک بخش مشخصی از آنرا دیباگ کنیم. در دو مقاله بعد از این سری مقالات ما درباره نحوه استفاده گزینه های دیباگ شل اسکریپت به منظور توضیح verbose، بررسی syntax و مدهای دیباگ shell tracing به همراه مثال بحث خواهیم کرد.