این راهنما اساساً درباره ساخت بلوک و اسکریپتها میباشد. برخی الزامات قبل از این که ادامه دهیم:
یک اسکریپت باید بدون خطا اجرا شود.
باید وظایفی را که برای آن نوشته شده انجام دهد.
منطق برنامه به وضوح تعریف شده و آشکار باشد.
اسکریپت کارهای غیر ضروری نکند.
اسکریپتها باید قابل استفاده مجدد باشند.
ساختار اسکریپت شل، بسیار قابل انعطاف است. ولواینکه درBash به مقدار زیاد، آزادی واگذار گردیده، شما بایداز صحت منطق، کنترل جریان و کارایی برنامه، به طوری که کاربران بتوانند، به آسانی و به طور صحیح اسکریپت را اجرا کنند، اطمینان حاصل نمایید.
وقتی یک اسکریپت جدید را شروع میکنید، سؤالهای زیر را از خود بپرسید:
آیا به دریافت اطلاعاتی از کاربر یا محیط کاربر نیاز دارم؟
آن اطلاعات را چطور ذخیره کنم؟
آیا نیاز به ایجاد فایلهایی میباشد؟ کجا وبا کدام مجوزها ومالکیت؟
از کدام دستورات استفاده خواهم کرد؟ وقتی اسکریپت در سیستمهای مختلف به کار میرود، همه این سیستمها، این دستورات را، با نگارشهای مورد نیاز، دارند
آیا کاربران به اخطارهایی نیاز دارند؟ چرا و درکجا؟
جدول زیر مروری برعبارتهای برنامهنویسی که لازم است شما با آنها، آشنا باشید، را ارائه مینماید:
جدول ۱.۱ . خلاصه عبارتهای برنامهنویسی
عبارت | به چه معنی است؟ |
---|---|
کنترل فرمان | بررسی کدهای خروج فرمان، به منظورتعیین آن که آیا یک بخش از برنامه باید اجرا بشود. |
انشعاب شرطی | محل منطقی در برنامه، وقتی یک شرط تعیین میکند که بعد، چه اتفاقی رخ بدهد. |
جریان منطق | طراحی کلی برنامه. ترتیب منطقی وظایف به طوری که نتیجه موفق و تحت کنترل باشد، را تعیین میکند. |
حلقه | بخشی از برنامه که، صفر تا چندین، مرتبه انجام میشود. |
ورودی کاربر | اطلاعات فراهم شده توسط منبع خارجی، در هنگامیکه برنامه در حال اجرا میباشد، میتواند ذخیره شده و موقع نیاز فراخوانده شود. |
به منظور بالا بردن سرعت پیشرفت فرایند، ترتیب منطقی برنامه باید مقدم بر پیشروی باشد. این اولین قدم شما هنگام ایجاد اسکریپت میباشد.
چند روش میتواند استفاده شود. یکی ازمهمترین آنها، کارکردن با لیستها است. جزءبه جزء نوشتن وظایف یک برنامه، به شما اجازه میدهد، هر فرایند را تشریح کنید. به وظایف انفرادی میتوان با شماره مربوط به آن ارجاع نمود.
یادداشت برداری وظایفی که برنامه باید انجام دهد، با استفاده از زبان گفتاری خودتان، میتواند به شما در ایجاد شکل قابل درک برنامه، کمک نماید. بعداً میتوانید، جملات به زبان روزمره را، با جملاتی باکلمات و ساختارهای شل، تعویض نمایید.
به عنوان نمونه مثال زیر منطق جریان طراحی را نشان میدهد. این، چرخه فایلهای log را تشریح میکند. این نمونه یک حلقه تکراری امکان پذیر را، که توسط عدد پایه تعیین شده برای چرخه فایلهای log کنترل میشود، نشان میدهد:
آیا میخواهید فایلهای log چرخشی باشند؟
اگر بلی:
نام دایرکتوری حاوی فایلهای log چرخشی را وارد کنید.
نام پایه برای فایل log را وارد کنید.
عدد روزهایی که فایلها باید نگهداری شوند را وارد کنید.
تنظیمات را در فایل crontab کاربر دائمی کنید.
اگر نه، به مرحله ۳ برو.
آیا میخواهید چرخه دیگری از log ها را برقرار کنید؟
اگر بلی: مرحله ۱ را تکرار کن.
اگر نه: به مرحله ۳ برو .
خروج
کاربر باید اطلاعاتی را جهت انجام اموری برای برنامه فراهم نماید. ورودی از کاربر بایستی دریافت و ذخیره شود، کاربر باید آگاه گردد که فایل crontab او تغییر خواهد کرد .
اسکریپت mysystem.sh
پایین، برخی دستورات شناخته شده (date, w, uname, uptime) را برای نمایش اطلاعاتی در باره ماشین شما، اجرا میکند .
tom:~>
cat-n
mysystem.sh
1 #!/bin/bash 2 clear 3 echo "This is information provided by mysystem.sh. Program starts now." 4 5 echo "Hello, $USER" 6 echo 7 8 echo "Today's date is `date`, this is week `date +"%V"`." 9 echo 10 11 echo "These users are currently connected:" 12 w | cut -d " " -f 1 - | grep -v USER | sort -u 13 echo 14 15 echo "This is `uname -s` running on a `uname -m` processor." 16 echo 17 18 echo "This is the uptime information:" 19 uptime 20 echo 21 22 echo "That's all folks!"
یک اسکریپت همواره با همان دو کاراکتر، “ #! ” آغاز میشود. بعد از آن، پوستهای که دستورات زیرین در اسکریپت را اجرا خواهد نمود، در اولین سطر تعیین شده است. این اسکریپت در سطر دوم صفحه نمایش را پاک میکند. سطر سوم پیغامی برای اطلاع کاربر از آنچه اتفاق خواهد افتاد چاپ میکند. سطر پنجم به کاربر خوشآمد میگوید. سطر ۶ ، ۹ ، ۱۳ ، ۱۶ ، ۲۰ فقط به منظور مرتب کردن نمایش خروجی است. سطر ۸ تاریخ جاری و روز هفته را چاپ میکند. سطر ۱۱ بار دیگر پیغام آگاهی بخش، مانند سطر ۳ ، ۱۸ و ۲۲ . سطر ۱۲ خروجی فرمان w را شکلدهی میکند، سطر ۱۵ اطلاعات سیستم عامل و CPU را نمایش میدهد. سطر ۱۹ مدت زمان فعالیت سیستم و بارگذاری اطلاعات رانشان میدهد.
هر دو فرمان echo و printf فرمانهای داخلی Bash میباشند . اولی همواره با کد وضعیت صفر خارج میشود و شناسههایش را به سادگی، همراه با یک کاراکتر انتهای سطر بعد از آنها، در خروجی استاندارد چاپ مینماید، درحالیکه دومی امکان تعریف شکل دهی رشته را فراهم میکند ودر صورت عدم موفقیت یک کد خروج غیر صفر میدهد .
این همان اسکریپت با استفاده از فرمان داخلی printf میباشد :
tom:~>
catmysystem.sh
#!/bin/bash clear printf "This is information provided by mysystem.sh. Program starts now.\n" printf "Hello, $USER.\n\n" printf "Today's date is `date`, this is week `date +"%V"`.\n\n" printf "These users are currently connected:\n" w | cut -d " " -f 1 - | grep -v USER | sort -u printf "\n" printf "This is `uname -s` running on a `uname -m` processor.\n\n" printf "This is the uptime information:\n" uptime printf "\n" printf "That's all folks!\n"
ایجاد اسکریپتهای کاربرپسند به وسیله درج پیغامها در فصل ۸ ،نوشتن اسکریپتهای فعل و انفعالی بحث شدهاند .
محل استاندارد Bourne Again shell | |
---|---|
این به طور ضمنی دلالت دارد که برنامهbashدر |
اگر خروجی استاندرد در دسترس نباشد | |
---|---|
اگر یک اسکریپت از فایل cron اجرا شود، نام مسیر کامل وتغییر جهت خروجی و خطا را فراهم مینماید. چون شل در حالت غیرمحاورهای اجرا میشود، هر خطایی، اگر از قبل به آن فکر نکرده باشید، موجب خروج پیشرس اسکریپت میگردد . |
فصلهای بعدی به تفصیل از اسکریپتهای بالا بحث خواهد شد.
یک اسکریپت init ماشین های یونیکس و لینوکس سرویسهای سیستم را شروع میکند. برنامه کمکی log سیستم، برنامه کمکی مدیریت توان، برنامه کمکی نام و مراسلات سیستم مثالهای عمومی میباشند. این اسکریپت ها که همچنین به عنوان اسکریپتهای (startup) شروع اولیه شناخته شدهاند، در یک مکان ویژه در سیستم ، از قبیل /etc/rc.d/init.d
یا /etc/init.d
ذخیره شدهاند. Init یا پردازش اولیه، فایلهای پیکربندیاش را میخواند و تصمیم میگیرد، کدام سرویسها، در هر سطح اجرایی باید شروع یا متوقف شوند. یک سطح اجرایی، یک پیکربندی ازپردازشها میباشد، هر سیستم یک سطح اجرایی یک کاربره دارد، به طور نمونه، برای انجام وظایف مدیریتی که برای آنها سیستم باید تا جایی که ممکن است، در حالت بدون استفاده باشد، مانند بازیابی حساس فایلسیستم از یک پشتیبان. سطوح اجرایی شروع مجدد و خاموش کردن سیستم نیزمعمولاً پیکربندی شدهاند.
وظایفی که در شروع یا توقف یک سرویس باید اجرا بشوند ، در اسکریپتهای شروع اولیه لیست شدهاند. یکی از وظایف مدیریت سیستم پیکربندی init است، به طوریکه سرویسها در لحظه مناسب شروع یا متوقف گردند. وقتی با این وظیفه مواجه شوید، باید درک خوبی از پردازشهای شروع اولیه وخاموش شدن، در سیستم خود داشته باشید. بنابراین ما نصیحت میکنیم که صفحههای man مربوط به init و inittab
را قبل از شروع کردن نصب اسکریپتهای خودتان، بخوانید.
در اینجا یک مثال بسیار ساده، که یک فایل صوتی راموقع شروع و توقف ماشین شما اجرا خواهد کرد:
#!/bin/bash # This script is for /etc/rc.d/init.d # Link in rc3.d/S99audio-greeting and rc0.d/K01audio-greeting case "$1" in 'start') cat /usr/share/audio/at_your_service.au > /dev/audio ;; 'stop') cat /usr/share/audio/oh_no_not_again.au > /dev/audio ;; esac exit 0
دستور case مورد استفاده اغلب این اسکریپتها در بخشی به نام «استفاده دستور exit و if » توضیح داده شده.