PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مقاله برنامه نویسی شل



آبجی
25th June 2010, 06:14 PM
دو راه برای نوشتن برنامه های شل در لینوکس وجود دارد:


تایپ کردن دستورات به صورت متوالی در خط فرمان
قرار دادن آنها در یک فایل متنی و اجرای آنها به وسیله خط فرمان

برنامه های محاوره ای

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

تایپ کردن اسکریپتهای shell بر روی خط فرمان یک راه ساده و سریع برای نوشتن قطعات کوچک کد به شمار می رود. و همچنین برای زمانی که شما در حال یادگیری و یا تست کردن آنها هستید بسیار مفید است.
به عنوان یک مثال ساده می توانید فرض کنید که شما تعداد فایل C دارید و می خواهید اسکریپتی طراحی کنید که به کمک آن دورن آنها دنبال کلمه POSIX بگردید به جای اینکه فرمان grep را برای تک تک آنها تایپ کنید می توانید از اسکریپت زیر استفاده کنید:


$ for file in *
> do
> if grep -1 POSIX $file
> then
> more $file
> fi
> done


توجه کنید که چگونه علامت معمول شل ($) رمانی که ورودی بیشتر را می طلبد از دلار به بزرگتر از (<) تغییر پیدا می کند. بعد از اینکه تایپ اسکریپ بالا در خط فرمان به اتمام برسد شل فورا آن را اجرا می کند
در مثال فوق دستور grep فایلهایی را که شامل عبارت POSIX هستند را چاپ می کند و سپس دستور more محتویات آنها را نمایش می دهد و در پایان علامت شل از < به دلار تغییر می کند.

http://wiki.osdev.ir/images/0/04/Caution.png: شل همچنین امکان استفاده از عبارات wildcard را فراهم کرده است که می توانید از آنها در اسکریپتهای خود استفاده کنید.
استفاده از فایلهای اسکریپت

می توان از هر ویرایشگر متنی استاندارد برای ایجاد اسکریپت های شل استفاده کرد. برای شروع به کار می توانید اسکریپت زیر را در خط فرمان تایپ کنید:

#!/bin/sh
#first example

for file in *
do
if grep -q POSIX $file
then
echo $file
fi
done
exit 0کامنتها در اسکریپت ها با # شروع می شوند و تا پایان خط ادامه دارند.کامنتهایی که دارای فرم #! را داند برای مشخص کردن برنامه هایی به کار می رودند که باید اسکریپت را اجرا کنند. به عنوان مثال در اسکریپت بالا برنامه /bin/sh باید اسکریپت را اجرا کند. در صورتی که کامنت فوق وجود نداشته باشد از برنامه پیش فرض که همان /bin/sh است استفاده می شود.
توجه کنید که مسیر مشخص شده توسط #! باید کمتر از 32 کاراکتر باشد زیرا بعضی از یونیکسهای قدیمی تنها می توانستند 32 کاراکتر بعد از #! را بخوانند اما معمولا لینوکس چنین محدودیتی را ندارد.
بعد از اینکه یک اسکریپت شروع به پذیرش از طرف شل کرد می تواتند تمامی دستورها و برنامه های موجود که مسیر آنها در متغییر سراسری PATH وجود دارد را اجرا کند.
دستور exit این اطمینان را می دهد که اسکریپت یک مقدار معین را بازگشت دهد. این مورد به ندرت در اسکریپتها بررسی می شود اما اگر اسکریپتی بخواهد یک اسکریپت دیگر را اجرا کند و بررسی کند که اسکریپت اجرا شده با موفقیت به پایان رسیده یا نه! می تواند مفید واقع شود. در یونیکس و لینوکس مقدار برگشتی صفر به معنای موفقیت و مقدار برگشتی غیر صفر به معنای وجود خطا است که مقدار برگشتی شماره خطا را مشخص می کند.
اجرا کردن فایل های اسکریپت

دو گزینه برای اجرای یک فایل اسکریپت شل لینوکس وجود دارد ساده ترین راه این است که آن را به عنوان یک پارامتر به برنامه شل ارسال کنید:


$ /bin/sh first

و یا اینکه آنها را همانند برنامه های لینوکس اجرا کنیم. برای اینکار در ابتدا باید به کمک chmod فایل اسکریپت را قابل اجرا کنیم:


$ chmod +X first

و حال می توان آن را همانند یک برنامه معمولی اجرا کرد:
$ ./first
گرامر شل

تا حال مثالهایی ساده را از شل معرفی کردیم حال بهتر است به صورت عمیقتر به بررسی قدرت برنامه نویسی شل بپردازیم. یادگیری زبان برنامه نویسی (اسکریپت نویسی) شل مخصوصا برای افرادی که تا کنون برنامه نویسی کرده اند بسیار آسان است.
متغییرها

در شل شما نیازی به تعریف نوع و یا حتی تعریف کردن متغییرها قبل از آنکه از آنها استفاده بکنید ندارید. بلکه آنها به صورت خودکار هرگاه که لازم باشند ایجاد می گردند به طور پیش فرض تمامی متغییرهای شل حتی زمانی که به آنها یک مقدار عددی انتصاب داده می شود به عنوان یک رشته در نظر گرفته می شوند و برنامه های کاربردی هرگاه که لازم باشد این رشته ها را به اعداد تبدیل می کنند. لازم به ذکر است که نام متغییرها همانند بقیه موارد در لینوکس حساس به بزرگی و کوچکی (case sensentive) هستند.
می توان به محتویات یک متغییر با قرار دادن علامت دلار قبل از نام آن دسترسی داشت. و برای انتصاب یک مقدار به یک متغییر تنها کافیست که نام آن ذکر گردد:


$ str=Hello World!
$ echo str
Hello World!

http://wiki.osdev.ir/images/0/04/Caution.png: لازم به ذکر است که بعد از علامت انتصاب (=) هیچ فاصله ای نباید قرار بگیرد.
متغییرهای محیطی

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


$HOME: شاخه home کاربر کنونی
PATH: لیستی از شاخه های جاری که برای جستجو فرامین به کار می روند که به : جدا شده اند.
IFS: کاراکترهای جدا کننده پارامترهای ورودی. معمولا لیستی از کاراکترهایی همانند tab، فاصله و ... هستند.
0: نام اسکریپت شل
H: تعداد پارامترهای ارسال شده.
$$: شماره پروسس اسکریپت. معمولا برای ایجاد فایلهای موقت (temp) منحصر به فرد به کار می رود.

پارامترهای ارسال شده

اگر اسکریپت شما به همراه یکسری از پارامترها فراخوانی شده باشد چند متغییر اضافی دیگر نیز ایجاد می شوند که در زیر لیست شده اند و اگر پارامتری ارسال نشود مقدار متغییر $H برابر با صفر خواهد بود.


$1 , $2 و ... : پارامترهای ارسال شده.
$*: یک لیست از تمامی پارامترهای ارسال شده که آن پارامترها به وسیله کاراکتر جداکننده (که در متغییر IFS مشخص شده) از همدیگر جدا شده اند.
@: ویرایشی قابل اطمینان از $* می باشد که در آن از IFS برای جدا سازی استفاده نشده بنابراین اگر کاربر IFS را برابر تهی قرار دهد پارامترها در کنار هم دیگر قرار نمی گیرند:



$ IFS=''
$ set foo bar bam
$ echo "$@"
foo bar bam
$ echo "$*"
foobarbam
$ unset IFS
$echo "$*"
foo bar bam

در مثال بالا پارامترهای foo bar bam به برنامه set ارسال شده.





منبع :http://wiki.osdev.ir

meysam_gbt
15th April 2013, 10:26 AM
خیلی ممنون استفاده کردم

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد