اسکریپت ها را در حال اجرا نگه دارید
هنگام توسعه برنامه ما، مفید است که برنامه را در حالت قابل اجرا نگه داریم. با انجام این کار و آزمایش مکرر، می توانیم خطاها را در مراحل اولیه توسعه تشخیص دهیم. این امر مشکلات رفع اشکال را بسیار آسان تر می کند. به عنوان مثال، اگر برنامه را اجرا کنیم، یک تغییر کوچک ایجاد کنیم، سپس دوباره برنامه را اجرا کنیم و مشکلی پیدا کنیم، به احتمال بسیار زیاد آخرین تغییر منشا مشکل است. با افزودن توابع خالی، فراخوانی می شود خرد خرد در زبان برنامه نویس، ما می توانیم جریان منطقی برنامه خود را در مراحل اولیه بررسی کنیم. هنگام ساختن یک خرد، ایده خوبی است که چیزی را اضافه کنید که بازخوردی را برای برنامه نویس ارائه دهد که نشان می دهد جریان منطقی در حال انجام است. اگر اکنون به خروجی اسکریپت خود نگاه کنیم:
[me@linuxbox ~]$ sys_info_page
گزارش اطلاعات سیستم برای twin2
[me@linuxbox ~]$ sys_info_page
گزارش اطلاعات سیستم برای twin2
گزارش اطلاعات سیستم برای لینوکس باکس
ایجاد شده در 03/19/2009 04:02:10 PM EDT، توسط من
گزارش اطلاعات سیستم برای لینوکس باکس
ایجاد شده در 03/19/2009 04:02:10 PM EDT، توسط من
می بینیم که پس از مهر زمانی، برخی از خطوط خالی در خروجی ما وجود دارد، اما نمی توانیم از علت آن مطمئن باشیم. اگر توابع را طوری تغییر دهیم که بازخورد داشته باشد:
Report_uptime () {
echo "function report_uptime اجرا شد."
برگشت
}
گزارش_فضای_دیسک () {
echo "function report_disk_space اجرا شد."
برگشت
}
Report_home_space () {
echo "function report_home_space اجرا شد."
برگشت
}
Report_uptime () {
echo "function report_uptime اجرا شد."
برگشت
}
گزارش_فضای_دیسک () {
echo "function report_disk_space اجرا شد."
برگشت
}
Report_home_space () {
echo "function report_home_space اجرا شد."
برگشت
}
و دوباره اسکریپت را اجرا کنید:
[me@linuxbox ~]$ sys_info_page
گزارش اطلاعات سیستم برای لینوکس باکس
گزارش اطلاعات سیستم برای لینوکس باکس
ایجاد شده در 03/20/2009 05:17:26 AM EDT، توسط من تابع report_uptime اجرا شد.
تابع report_disk_space اجرا شد. تابع report_home_space اجرا شد.
[me@linuxbox ~]$ sys_info_page
گزارش اطلاعات سیستم برای لینوکس باکس
گزارش اطلاعات سیستم برای لینوکس باکس
ایجاد شده در 03/20/2009 05:17:26 AM EDT، توسط من تابع report_uptime اجرا شد.
تابع report_disk_space اجرا شد. تابع report_home_space اجرا شد.
اسکریپت ها را در حال اجرا نگه دارید
اکنون می بینیم که در واقع، سه تابع ما در حال اجرا هستند.
با وجود چارچوب عملکرد ما و کار کردن، زمان آن رسیده است که برخی از کدهای تابع را مشخص کنیم. اول، report_uptime عملکرد:
Report_uptime () {
گربه <<- _EOF_
آپ تایم سیستم
$(زمان آپدیت)
_EOF_
برگشت
}
Report_uptime () {
گربه <<- _EOF_
آپ تایم سیستم
$(زمان آپدیت)
_EOF_
برگشت
}
خیلی سرراست است. ما از یک سند here برای خروجی هدر بخش و خروجی از استفاده می کنیم آپ تایم فرمان، احاطه شده توسط برچسب ها برای حفظ قالب بندی دستور. را گزارش_فضای_دیسک عملکرد مشابه است:
گزارش_فضای_دیسک () {
گربه <<- _EOF_
استفاده از فضای دیسک
$(df -h)
_EOF_
برگشت
}
گزارش_فضای_دیسک () {
گربه <<- _EOF_
استفاده از فضای دیسک
$(df -h)
_EOF_
برگشت
}
این تابع از DF -H دستور تعیین مقدار فضای دیسک. در نهایت، ما آن را می سازیم Report_home_space عملکرد:
Report_home_space () {
گربه <<- _EOF_
استفاده از فضای خانه
$(du -sh /home/*)
_EOF_
برگشت
}
Report_home_space () {
گربه <<- _EOF_
استفاده از فضای خانه
$(du -sh /home/*)
_EOF_
برگشت
}
ما با استفاده از du فرمان با -ش گزینه هایی برای انجام این کار با این حال، این یک راه حل کامل برای مشکل نیست. در حالی که در برخی از سیستم ها (به عنوان مثال اوبونتو) کار می کند، در برخی دیگر کار نمی کند. دلیل آن این است که بسیاری از سیستمها مجوزهای دایرکتوریهای خانگی را برای جلوگیری از خوانایی جهانی آنها تنظیم میکنند که یک اقدام امنیتی معقول است. در این سیستم ها، Report_home_space تابع، همانطور که نوشته شده است، خواهد بود
فقط در صورتی کار می کند که اسکریپت ما با امتیازات superuser اجرا شود. راه حل بهتر این است که اسکریپت رفتار خود را مطابق با امتیازات کاربر تنظیم کند. در فصل بعدی به این موضوع خواهیم پرداخت.
توابع پوسته در فایل bashrc
توابع پوسته جایگزین های عالی برای نام های مستعار هستند و در واقع روش ترجیحی برای ایجاد دستورات کوچک برای استفاده شخصی هستند. نامهای مستعار در نوع دستورات و ویژگیهای پوسته که پشتیبانی میکنند بسیار محدود هستند، در حالی که توابع پوسته اجازه میدهند هر چیزی را که بتوان اسکریپت نوشت. به عنوان مثال، اگر ما دوست داشتیم گزارش_فضای_دیسک تابع پوسته ای که برای اسکریپت خود توسعه دادیم، می توانیم یک تابع مشابه به نام ایجاد کنیم ds برای ما .بشرک فایل:
ds () {
بازتاب "استفاده از فضای دیسک برای $HOSTNAME" df -h
}