فهرست مندرجات
چکیده
پس ازمطالعه این فصل، قادر خواهید بود :
یک اسکریپت ساده بنویسید
تعیین نوع پوستهای که که باید اسکریپت را اجرا کند
در اسکریپت توضیحات قرار دهید
مجوزهای اسکریپت را تغییر بدهید
اسکریپت را اجرا و اشکالزدایی کنید
اسکریپت شل، یک توالی از دستورات است که شما به طور مکرر استفاده می کنید. این توالی به طور نوعی با وارد کردن نام اسکریپت در خط فرمان، اجرا میشود. به طور جایگزین، میتوانیداز اسکریپتها، با استفاده از امکان cron، وظایف را خودکار نمایید. استفاده دیگر از اسکریپت، در فرایند بالا آمدن (boot) و خاموشی (shutdown) سیستم یونیکس است، جایی که عملیات برنامه های کمکی و سرویس ها در اسکریپتهای init تعیین میشوند .
برای ایجاد اسکریپت شل، یک فایل جدید در ویرایشگر خود باز نمایید. باهر ویرایشگر متن قابل انجام است: vim ، emacs ، gedit ،dtpad وغیره، همه معتبر هستند. ممکن است شما بخواهید از ویرایشگر پیشرفتهتری مثل vim یا emacs استفاده کنید، چون اینها میتوانند برای تشخیص دستور زبان Bash پیکربندی بشوند، که مساعدت بزرگی در جلوگیری از اشتباهاتی که تازه کارها خیلی اوقات مرتکب میشوند، میباشد، مانند فراموش کردن براکتها و سمی کالنها.
روشن کردن دستور زبان در vim | |
---|---|
به منظور فعال سازی جلوه نمودن دستور زبان در vim ، از دستور
یا
یا
استفاده کنید . میتوانید این تنظیمات را با افزودن به فایل |
دستورات یونیکس را در فایل جدید درج کنید، همانطور که آن ها را در خط فرمان وارد میکنید. به طوری که در فصل قبل بحث شد ( بخشی به نام « اجرای دستورات » را ببینید )، دستورات میتوانند توابع شل، دستورات داخلی شل، فرمانهای یونیکس وسایر اسکریپتها باشند .
یک نام قابل درک به اسکریپت خود بدهید ،که اشارهای به آنچه اسکریپت انجام میدهد داشته باشد . مطمئن شوید که نام اسکریپت با فرمانهای موجود تداخل نمیکند . به منظور اطمینان از آن که موجب سردرگمی نخواهد شد، نام اسکریپتها اغلب به .sh
ختم میشود، هنوز، امکان دارد اسکریپتهای دیگری در سیستم شمابا همان نام انتخابی شما وجود داشته باشد. با استفاده از دستور which ، whereis و سایر فرمانهای جستجوکننده اطلاعات در مورد برنامه ها وفایلها، بررسی کنید:
which
-a
script_name
whereis
script_name
locate
script_name
در این مثال دستور داخلی echoی Bash قبل از انجام ماموریتی که خروجی را تولید خواهد نمود، به کاربر اطلاع میدهد که چه اتفاقی رخ خواهد داد. آگاهی کاربران در باره آنچه اسکریپت انجام میدهد، شدیداً توصیه گردیده است، برای جلوگیری از عصبیت آنها به سبب آن که اسکریپت هیچ کاری انجام نمیدهد! ما به موضوع اطلاع رسانی به کاربر در فصل ۸ ،نوشتن اسکریپتهای فعل و انفعالی باز خواهیم گشت .
این اسکریپت را نیز برای خود بنویسید. شاید، ایده خوبی باشد که، یک دایرکتوری ~/scripts
برای نگهداری اسکریپتهای خود ایجاد کنید. دایرکتوری را به محتوای متغیر PATH
اضافه کنید :
export
PATH
="$PATH
:~/scripts
"
اگر کار با Bashرا تازه شروع کردهاید، از یک ویرایشگر متن که رنگهای متفاوت برای ساختارهای مختلف شل به کار میبرد، استفاده کنید. روشن کردن دستورزبان توسط vim ، gvim ، (x)emacs ، kwrite و بسیاری ویرایشگرهای دیگر پشتیبانی میشود، مستندات ویرایشگر مطلوب خود را ملاحظه کنید.
اعلان فرمانهای متفاوت | |
---|---|
امروزه اعلانها به نسبت حوصله مؤلفین آنهامتنوع هستند. این بیشتر به حالات زندگی واقعی شباهت دارد تا اعلان استاندارد آموزشی $ .تنها قاعدهای که به آن پایبند میمانیم آن است که اعلان فرمان root به علامت hash (#) ختم میشود. |
اسکریپت جهت قابل اجرا بودن، باید دارای مجوز های صحیح اجرا برای دارندگان باشد. وقتی مجوزها را تنظیم میکنید،کنترل کنید که واقعاًمجوزهایی که میخواهید بدست آورده باشید. موقعی که این کار انجام شود، اسکریپت میتواند همانند هر دستور دیگر اجرا شود:
willy:~/scripts>
chmodu+x
script1.sh
willy:~/scripts>
ls-l
script1.sh
-rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.shwilly:~>
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
source = . | |
---|---|
دستور داخلی source در Bash مترادف فرمان . (dot) در شل بورن است. |
در این حالت اسکریپت به مجوز اجرا نیاز ندارد. دستورات در متن شل جاری اجرا میگردند، بنابراین هر تغییر ایجاد شده در محیط شما، موقعی که اجرای اسکریپت به پایان میرسد، نیز مشهود خواهد بود:
willy:~/scripts>
sourcescript1.sh
--output ommitted--willy:~/scripts>
echo$VALUE
9willy:~/scripts>