برنامه نویسی shell
مهمترین فایل ها
هسته
هسته قلب سیستم عامل لینوکس است. منابع لینوکس و ارتباط بین سخت افزار های اصلی و جانبی را مدیریت می کند.منظور از منابع، کلیه تسهیلات و امکاناتی است که این سیستم عامل در اختیار
می گذارد.برای مثال توانایی ذخیره داده ها،چاپ داده ها توسط چاپگر، حافظه، مدیریت فایل و غیره.
هسته تصمیم می گیردکه چه کسی، کی و برای چه مدت از این منابع استفاده خواهد کرد.
همچنین این اطمینان را می دهد که فرایندها و از جمله فرایند های سرور،دقیقا در زمان صحیح آغاز شده و پایان یابند.هسته وظایف مهم دیگری نیز دارد .برای شروع تنها کافیست بدانیم که هسته مهمترین فایل سیستم است.
SHELL
زبانی که کامپیوتر درک می کند زبانی از 0 و 1 ها است که زبان دودویی نامیده می شود.دستورات کامپیوتری در واقع با همین زبان دودویی_که خواندن و نوشتن آن برای تمامی ما مشکل است_سر و کار دارند.به این ترتیب برنامه خاصی در سیستم عامل وجود دارد که shell نامیده می شود.shell دستورات و فرامین را به زبان انگلیسی می پذیرد و سپس آن را به زبان کامپیوتر یعنی همان زبان دودویی ترجمه
می کند.
Shell یک مفسر زبان دستوری است که دستوراتی را که از ابزار ورودی استاندارد(صفحه کلید) و یا فایل خوانده است، اجرا می کند.لینوکس معمولا از یکی از متدوال ترین shell های زیر استفاده می کند.(در
MS-DOS ،COMMAND.COM همان SHELL است که اهداف مشابهی دارد اما به اندازه SHELL در لینوکس قدرتمند نیست.)
نام shell : توضیح
BASH(Bourne-Again SHell) :متداول ترین shell در لینوکس
CSH(C SHell) :گرامر و طرز استفاده از CSH بسیار مشابه زبان برنامه نویسی C است.
و KSH(Korn SHell)
انواع SHELL (به طور کلی)
همان گونه که افراد زبان ها و لهجه های متفاوتی را می شناسند، کامپیوتر نیز با انواع مختلفی از
SHELL ها سر و کار دارد:
• Sh یا Shell Bourne :shell اولیه که هنوز در سیستم های یونیکس و محیط های وابسته به یونیکس استفاده می شود.این shell پایه است،برنامه ای است کوچک با ویژگی هایی اندک.
• Bash یا SHell) (Bourne Again :shell استاندارد GNU.احتمالا بهترین نوع برای استفاده توسط کاربران مبتدی. علاوه بر اینکه ابزاری قدرتمند برای کابران پیشرفته و حرفه ای محسوب
می شود.در لینوکس bash ،shell استاندارد برای کاربران عمومی است.این نوع shell می تواند
جایگزین نوع Bourne شود و این بدان معنی است که دو نوع shell مذکور با یکدیگر قابل مقایسه
هستند:دستوراتی که در Shell نوع Sh عمل می کنند، در bashنیز کار می کنند.در حالیکه عکس
این مطلب همیشه درست نیست.
• csh یا shell C :همانگونه که گفته شد، از لحاظ نحوی(دستوری) این نوع مشابه زبان برنامه نویسی C می باشد.گاهی اوقات مورد استفاده برنامه نویسان قرار می گیرد.
• tcsh یا shell turbo C :جانشین shell عمومی C، که سرعت آن افزایش یافته است.
• Ksh یا shell Korn: جانشین shell Bourne با پیکربندی استاندارد و کابوسی برای کاربران مبتدی.
هر یک از انواع ذکر شده دستورات کاربر را می خواند(از طریق صفحه کلید یا ماوس) و به سیستم عامل لینوکس می گوید که کاربر چه چیزی می خواهد.
برای این که بدانید از کدام نوع shell استفاده می کنید، دستور زیر را تایپ کنید :
$ echo $SHELL
طریقه استفاده از SHELL
برای استفاده از shell ( شما به محض log in کردن به سیستم شروع به استفاده از shell می کنید.) باید دستورات را تایپ کنید. در ادامه لیستی از متداولترین دستورات آمده است:
فرمان های معمول در لینوکس
توجه داشته باشید که دستورات زیر تنها برای کاربران جدید یا مبتدی است.هدف این است که اولا در صورت استفاده از این دستورات بیشتر با SHELL سیستم خود اشنا شوید و ثانیا شما به برخی از این دستورات در SHELL SCRIPT خود احتیاج دارید. اگر کمک و یا اطلاعات بیشتری را راجع به دستوری بخواهید، می توانید از دستور زیر که به عنوان مثال برای دیدن کمک و یا گزینه های مربوط به فرمان date است، استفاده کنید:
$ date - -help
یا برای دیدن کمک یا گزینه های مربوط به فرمان ls :
$ ls - -help | more
ببینید زمانی که دستورات زیر را تایپ می کنید چه اتفاقی می افتد:
$ man ls
$ info bash
فرمان های لینوکس
شکل گرامری فرمان : موارد استفاده
date : برای مشاهده تاریخ.
who : تعیین اینکه چه کسی از سیستم استفاده می کند.
pwd :دایرکتوری های مشغول به کار را چاپ می کند.
ls یا dirs :فایل های موجود در دایرکتوری جاری را فهرست می کند.
{ نام فایل } < cat : برای ایجاد فایل متنی. نکته: برای توقف یا پایان دادن به فایل کلید کنترل (CTRL) را نگه دارید و کلید D را بزنید.(CTRL+ D)
{نام فایل} cat : برای دیدن فایل های متنی.
{نام فایل} more: برای نمایش یک فایل در هر زمان به صورت full screen.
{فایل 2} {فایل 1 } mv: برای تغییر مکان و یا تغییر نام فایل یا دایرکتوری.
{فایل جدید} {فایل قدیمی} ln : برای ایجاد کپی های چند تایی از فایل با پیوند های مختلف.بعد از این دستور هر دو فایل جدید و قدیمی به یک نام ارجاع می دهند.به عبارت دیگر برای پیوند یک نام فایل به نام فایل دیگر.
فایل1 rm: برای حذف فایل.
{نام دایرکتوری} rm – rf :تمامی فایل های دایرکتوری یا زیر دایرکتوری داده شده را حذف می کند.در استفاده از این فرمان بسیار دقت کنید.
{نام فایل} chmod : برای تغییر اجازه دسترسی به فایل.
mail: می توانید mail خود را با این فرمان بخوانید.
who am i: برای مشاهده اطلاعات بیشتر راجع به کاربر جاری.
logout (یا CTRL+D) : برای خارج شدن(log out).
{نام کاربر} mail: ارسال mail به شخص دیگر.
{نام فایل} wc: برای شمارش خطوط، کلمات و حروف فایل داده شده.
{نام فایل} {کلمه مورد نظر} grep: برای جستجوی خطی که با الگوی داده شده مطابقت دارد، در فایل مشخص شده.
{نام فایل} sort –r –n –nr:برای مرتب سازی فایل به یکی از ترتیب های زیر:
- r: عکس ترتیب عادی.
- n:مرتب سازی به ترتیب عددی.
- nr:مرتب سازی به ترتیب عکس عددی.
{نام فایل} {شماره خط} tail - |+: برای چاپ اولین یا اخرین خط فایل داده شده.
{فایل2} {فایل1} cmp یا {فایل2} {فایل1} diff: برای مقایسه فایل ها.
{نام فایل} pr : برای چاپ فایل.
Processes چیست؟
Process (فرایند) هر نوع برنامه یا کاریست که توسط PC شما انجام می شود.برای مثال $ ls – IR ،یک دستور یا درخواست برای فهرست کردن فایل های موجود در دایرکتوری و تمام زیر دایرکتوری های دایرکتوری جاری شماست.این، یک نوع فرایند است.process ،یک برنامه(دستور داده شده توسط کاربر) برای انجام یک سری کارهاست.در لینوکس زمانی که شما یک process را اغاز می کنید، هر فرایند یک شماره
می گیرد،(که به ان PID یا Process-ID می گویند.) ، PID عددی از 0 تا 65535 است.
چرا به process احتیاج است؟
لینوکس یک سیستم عامل چند کاربره و چند کاره است.به این معنی که اگر بخواهید می توانید بیش از 2 فرایند را به طور همزمان اجرا کنید.به عنوان مثال برای اینکه بدانید چه تعداد فایل روی سیستم خود دارید، ممکن است دستوری مانند زیر را بدهید:
$ ls / -R | wc – l
این دستور زمان زیادی را برای جستجوی تمامی فایل های سیستم می گیرد.پس شما می توانید چنین دستوری را در background اجرا کنید یا به طور همزمان با دادن دستوری مثل:
$ ls / -R | wc –l &
علامت & در انتهای فرمان، به shell اعلام می کند که فرمان( ls / -R | wc –l) را آغاز کند و انرا در background اجرا کند و بلافاصله دستور بعدی را بگیرد.
مثال فوق یک فرایند است و عددی که توسط shell چاپ می شود PID نامیده می شود.از این PID ممکن است برای ارجاع به یک پروسه(process) در حال اجرای مشخص استفاده شود.
فرمان های مرتبط با process در لینوکس
نام فرمان : موارد استفاده
ps: برای مشاهده پروسه در حال اجرای جاری.
Kill {PID}: برای متوقف کردن هر پروسه.
ps – ag :برای گرفتن اطلاعات در مورد تمام پروسه های جاری.
Kill 0 : برای متوقف ساختن کلیه فرایند ها به جز shell.
linux-command &: برای فرایندهای background (علامت & برای قرار دادن دستور یا برنامه ای خاص در background استفاده می شود.)
توجه داشته باشید که شما تنها قادرید پروسه هایی را که خودتان ایجاد کرده اید، متوقف کنید.administrator معمولا می تواند 95-98% پروسه ها را متوقف کند.اما برخی پروسه ها نمی توانند متوقف شوند، مانند VDU.
تغییر مسیر ورودی/خروجی استاندارد
اغلب تمامی فرمان ها ،خروجی را به صفحه نمایش می دهند و ورودی را از صفحه کلید می گیرند، اما در لینوکس این امکان وجود دارد که خروجی به فایل فرستاده شود و یا ورودی از فایل خوانده شود.برای مثال فرمان $ ls خروجی را به صفحه نمایش می دهد.اما فرمان $ ls > filename خروجی را به فایل
می فرستد. معنی فرمان این است که خروجی فرمان ls را به فایل مشخص شده بفرست.
3 نماد اصلی برای تغییر مسیر وجود دارد: > و << و <.
(1) نماد تغییر مسیر <
شکل گرامری دستور: نام فایل < فرمان لینوکس
برای اینکه خروجی به فایل فرستاده شود.توجه داشته باشید که اگر فایل وجود داشته باشد،
باز نویسی می شود (با خروجی مربوط) و در غیر این صورت فایل جدیدی ایجاد می شود.
برای مثال برای فرستادن خروجی فرمان ls، دستور روبه رو را بدهید:
$ ls > myfiles
حال اگر فایل “myfiles” در دایرکتوری جاری شما موجود باشد،بدون هیچ نوع اعلام خطا بازنویسی
می شود.(در صورتی که بخواهید محتوای فایل قبلی را نیز حفظ کنید، باید از نماد تغییر مسیر بعدی استفاده کنید.)
(2) نماد تغییر مسیر <<
شکل گرامری دستور : نام فایل << فرمان لینوکس
برای فرستادن خروجی به انتهای فایل.توجه داشته باشید در صورتی که فایل وجود باشد،فایل باز خواهد شد و بدون حذف اطلاعات/داده های قبلی اطلاعات/داده ها در انتهای فایل نوشته می شوند و اگر فایل وجود نداشته باشد،فایل جدیدی ایجاد می شود.برای مثال برای فرستادن خروجی فرمان date به فایل موجود دستور روبه رو را بدهید:
$ date >> myfiles
(3) نماد تغییر مسیر >
شکل گرامری دستور : نام فایل > فرمان لینوکس
به منظور گرفتن ورودی برای فرمان لینوکس از فایل به جای صفحه کلید.
به عنوان مثال برای گرفتن ورودی از فایل برای فرمان cat، از فرم زیر استفاده کنید:
$ cat < myfiles
Pipes
Pipe راهی است برای برقراری ارتباط بین خروجی یک برنامه و ورودی برنامه ای دیگر بدون هیچ فایل موقتی.
در واقع pipe محلی موقتی برای ذخیره است که در آن خروجی یک فرمان ذخیره شده و سپس به عنوان ورودی برای فرمان بعدی عبور می کند.pipes برای اجرای بیش از دو فرمان(فرمان های چند گانه) از یک خط فرمان استفاده می شوند.
شکل گرامری فرمان: فرمان 2 |فرمان1
فرمان ها با استفاده از pipes
فرمان : مفهوم یا استفاده pipes
$ ls | more : در اینجا خروجی فرمان ls، به عنوان ورودی فرمان more در نظر گرفته می شود به طوریکه خروجی در هر زمان به صورت full screen چاپ می شود.
$ who | sort : در این حالت خروجی فرمان who به عنوان ورودی به فرمان sort داده می شود به طوریکه به صورت لیست مرتب شده ای از کاربران چاپ خواهد شد.
$ who | wc –l : در این حالت خروجی فرمان who به عنوان ورودی به فرمان wc داده می شود، به طوریکه تعداد کاربرانی را که وارد سیستم شده اند(logon کرده اند) را چاپ می کند.
$ ls –l | wc –l : اینجا خروجی فرمان ls به عنوان ورودی به فرمان wc داده می شود به طوریکه تعداد فایل ها در دایرکتوری جاری را چاپ می کند.
$ who | grep raju : در این حالت خروجی فرمان who به عنوان ورودی به فرمان grep داده می شود به طوریکه نام کاربر خاص را در صورتی که logon کرده باشد چاپ می کند و در غیر این صورت چیزی را چاپ نمی کند.
Filter
اگر فرمان لینوکس ورودی خود را به فرم استاندارد بپذیرد و خروجی اش را نیز به فرم استاندارد تولید کند، به عنوان فیلتر شناخته می شود. Filter برخی فرایند ها را روی ورودی انجام داده و خروجی را می دهد.برای مثال فرض کنید فایلی با عنوان hotel.txt با 100 خط داده، داریم و می خواهیم محتویات این فایل از خط شماره 20 تا خط 30 را چاپ کرده و نتایج را در فایلی با نام hlist ذخیره کنیم، دستور زیر را می دهیم:
$ tail +20 < hotel.txt | head –n30 >hlist
در اینجا head ، filter است که ورودی اش را از فرمان tail می گیرد ( فرمان tail با انتخاب از خط شماره 20 از فایل داده شده به عنوان مثال hotel.txt، آغاز می شود.)و خروجی آن به فایل hlist تغییر مسیر داده است.

مقدمه ای بر برنامه نویسی shell
برنامه نویسی shell مجموعه ایست از فرمان های لینوکس.shell script درست همانند فایل batch در MS_DOS است اما قدرت بیشتری دارد.shell script قادر است ورودی را از کاربر و یا فایل گرفته و خروجی را روی صفحه نمایش نشان دهد.و همچنین برای ایجاد فرامین خاص کاربر _که می توانند به میزان زیادی در زمان صرفه جویی کنند و بسیاری از کارهای روزمره را به طور خودکار انجام دهند _ مفید می باشد.
متغیر ها در لینوکس
گاهی اوقات برای پردازش داده/اطلاعات باید آنها را در حافظه RAM نگهداری کرد.حافظه RAM به مکان های کوچکی تقسیم شده است، و هر مکان یک عدد منحصر به فرد دارد که مکان یا ادرس حافظه نامیده
می شود، و برای نگهداری داده ها استفاده می شود.برنامه نویس می تواند یک نام یکتا به این مکان های حافظه بدهد که متغیر های حافظه یا به طور خلاصه متغیر نامیده می شوند.(این ها در واقع مکان های حافظه دارای نام می باشند که ممکن است مقادیر مختلفی داشته باشند، اما در یک زمان می توانند تنها یک مقدار داشته با شند.)
در لینوکس 2 نوع متغیر داریم:
1) متغیر های سیستمی : توسط خود لینوکس ایجاد و نگهداری می شوند.این نوع متغیر ها با حروف بزرگ تعریف می شوند.
2) متغیر های تعریف شده توسط کاربر(UDV) : توسط کاربر ایجاد و نگهداری می شوند.این نوع متغیر ها با حروف کوچک تعریف می شوند.
برخی از متغیر های سیستمی
شما می توانید متغیرهای سیستمی را با دادن دستور $ set ،مشاهده کنید.برخی از مهمترین متغیر های سیستمی عبارتند از:
BASH=/bin/bash : نام shell
BASH_VERSION=1.14.7(1) : نام ورژن shell
COLUMNS=80 : تعداد ستون های صفحه نمایش
HOME=/home/vivek : دایرکتوری HOME
LINES=25 : تعداد سطرهای صفحه نمایش
LOGNAME=students : نام logging
OSTYPE=Linux : نوع سیستم عامل
PATH=/usr/bin:/sbin:/bin:/usr/sbin : وضع ظاهری PATH
PS1=[\u@\h\W]\$ : وضع ظاهری prompt
PWD=/home/students/Common : دایرکتوری در حال فعالیت جاری
SHELL=/bin/bash : نام shell
USERNAME=vivek : نام کاربری فردی که هم اکنون وارد سیستم شده است.
توجه داشته باشید که برخی از موارد فوق ممکن است در کامپیوتر شما متفاوت باشند. شما می توانید محتوای هر یک از متغیر های فوق را مانند زیر چاپ کنید:
$ echo $USERNAME
$ echo $HOME
توجه:متغیر های سیستمی را تغییر ندهید.این موضوع گاهی سبب ایجاد مشکلاتی می شود.
چگونه متغیر های تعریف شده توسط کاربر را تعریف کنیم؟
برای تعریف UDV از شکل گرامری زیر استفاده کنید:
مقدار = نام متغیر
نکته: در این جا 'مقدار' به نام متغیر تخصیص داده می شود و مقدار باید در سمت راست علامت = قرار گیرد.مثال های زیر را در نظر بگیرید:
$ no=10 # این مثال درست است
$ 10=no #این مورد اشتباه است. خطا:
برای تعریف متغیری با نام 'vech' با مقدار Bus :
$ vech=Bus
برای تعریف متغیری با نام n با مقدار 10 :
$ n=10
قواعد نام گذاری متغیر ها برای هر دو نوع متغیر های (UDV) وسیستمی
1) نام متغیر باید با یک کارکتر حرفی یا عددی و یا نماد خط زیر ( _ ) اغاز شود که به دنبال ان یک یا تعداد بیشتری حروف عددی می اید. برای مثال متغیر های shell زیر صحیح هستند:
HOME
SYSTEM_VERSION
vech
no
2) هنگام تخصیص مقدار به متغیر در هیچ یک از دو طرف علامت مساوی فاصله ندهید.به عنوان مثال در اعلان متغیر زیر هیچ خطایی رخ نداده است:
$ no=10
اما موارد زیر اشکال دارند:
$ no =10
$ no= 10
$ no = 10
3) متغیر ها درست مثل نام فایل در لینوکس نسبت به کوچکی و بزرگی حروف حساسند.
(case-sensitive). مثال های زیر را در نظر بگیرید:
$ no=10
$ No=11
$ NO=20
$ nO=2
هر یک از متغیر های فوق با دیگری متفاوت است.بنا بر این برای چاپ مقدار 20 ما مجبوریم از
$ echo $NO استفاده کنیم.و هیچ یک از دستورات زیر برای این منظور به کار نمی روند.
$ echo $no 10را چاپ خواهد کرد نه 20 را #
$ echo $No #11 را چاپ خواهد کرد نه 20 را
$ echo $nO #2 را چاپ خواهد کرد نه 20 را
4) شما می توانید متغیر تهی را مانند زیر تعریف کنید.(متغیر تهی متغیری است که در زمان تعریف هیچ مقداری ندارد.) به عنوان مثال
$ vech=
$ vech=””
چاپ مقدار این متغیر را امتحان کنید.$ echo $vech ،در این حالت هیچ چیز نمایش داده نمی شود زیرا متغیر هیچ مقداری ندارد.
5) از کارکتر هایی مثل ? ، * و غیره برای نامگذاری متغیرتان استفاده نکنید.
چگونه به مقادیر UDV دسترسی داشته باشیم یا آنها را چاپ کنیم؟
برای چاپ یا دسترسی به UDV از شکل گرامری زیر استفاده کنید:
نام متغیر$
به عنوان مثال برای چاپ محتوای متغیر vech :
$ echo $vech
فرمان فوق 'bus ' را چاپ می کند(اگر قبلا به صورت vech=bus تعریف شده باشد.)، برای چاپ محتوای متغیر 'n ' $ echo $n ، '10' را چاپ می کند.(اگر قبلا به صورت n=10 تعریف شده باشد.)
توجه: از $ echo vech استفاده نکنید،این فرمان vech را به جای مقدارش یعنی 'Bus' چاپ می کند و
$ echo n ، n را به جای مقدارش یعنی '10' چاپ می کند.شما باید از $ که به دنبالش نام متغیر
آمده است استفاده کنید.
پرسش و پاسخ
سئوال1: چگونه متغیر x با مقدار 10 را تعریف کرده و انرا در صفحه نمایش چاپ کنیم؟
$ x=10
$ echo $x
سئوال 2: چگونه متغیر xn با مقدار Rani را تعریف کرده و انرا در صفحه نمایش چاپ کنیم؟
$ xn=Rani
$ echo $xn
سئوال 3: چگونه مجموع دو عدد را چاپ کنیم؟( دو عدد را 3 و 6 در نظر بگیرید)
$ echo 6+3
این فرمان چاپ می کند 3+6 ، و مجموع ان دو یعنی 9 را چاپ نمی کند.برای جمع یا عملیات ریاضی در shell از expr استفاده کنید.شکل گرامری ان به صورت زیر است:
expr op1 operator op2
که در آن op1 و op2 هر دو می توانند اعداد صحیحی باشند(عدد صحیح: بدون قسمت اعشار) و operator یا عملگر می تواند یکی از عملگرهای جمع (+) ، تفریق (-) ، تقسیم ( / )، ضرب( \*) و
mod ( %) باشد که % برای محاسبه باقیمانده استفاده می شود.به عنوان مثال 20 / 3 = 6 و
20 % 3 = 2.
$ expr 6 + 3
حال این فرمان 9 را به عنوان جمع دو عدد چاپ می کند. ولی $ expr 6+3 عمل نمی کند زیرا بین عملگر و عدد باید فاصله باشد.
سئوال4: چگونه دو متغیر x=20 و y=5 را تعریف و سپس تقسیم x بر y را چاپ کنیم؟
$ x=20
$ y=5
$ expr x / y
سئوال5: مثال فوق را تغغیر داده و حاصل تقسیم را در متغیری با نام z ذخیره کنید.
$ x=20
$ y=5
$ z=’ expr x / y ‘
$ echo $z
نکته:در مورد دستور سوم بعدا توضیح می دهیم.
چگونه shell script بنویسیم؟
اکنون ما اولین script خود را می نویسیم که نتیجه آن چاپ 'knowledge is power' بر روی صفحه نمایش می باشد. برای نوشتن shell script می توانید از ویرایشگر متنی لینوکس مانند vi یا mcedit استفاده کنید و یا حتی می توانید از فرمان cat استفاده کنید.در اینجا ما از فرمان cat استفاده می کنیم،شما می توانید از هر یک از ویرایشگر های فوق استفاده کنید.ابتدا فرمان cat زیر و ادامه متن را تایپ کنید:
$ cat > first
#
# My first shell script
#
clear
echo ' knowledge is power'
Ctrl + D را برای ذخیره بزنید.اکنون script شما آماده است برای اجرای ان فرمان زیر را تایپ کنید:
$ ./first
در این حالت سیستم اعلام خطا می کند.زیرا ابتدا اجازه اجرا را برای اولین script خود تنظیم نکرده ایم.برای انجام این کار فرمان زیر را تایپ کنید:
$ chmod +x first
$ ./first
ابتدا صفحه نمایش پاک می شود، سپس knowledge is power بر روی صفحه چاپ می شود.برای چاپ پیغامی از محتوای متغیر ها از فرمان echo استفاده می کنیم، شکل کلی فرمان echo به صورت زیر است:
echo 'Message'
echo ' Message variable1, variable2…variableN'
چگونه shell script را اجرا کنیم؟
به علت امنیت فایل ها در لینوکس، ایجاد کننده shell script به صورت پیش فرض اجازه اجرای آن را ندارد.
بنابراین اگر مایل به اجرای ان باشیم باید 2 کار زیر را انجام دهیم:
1) استفاده از دستور chmod به صورت زیر برای دادن اجازه اجرا به script .شکل گرامری ان به صورت زیر است:
chmod +x shell-script-name یا
chmod 777 shell-script-name
2) اجرای script به صورت زیر:
./your-shell-program-name
به عنوان مثال:
$ ./first
در اینجا نقطه (.) فرمان محسوب می شود و به صورت ترکیب با shell script استفاده می شود.نقطه به shell جاری اشاره می کند که فرمان پس از ان(.) باید در همان shell اجرا شود و shell دیگری نباید در حافظه بار شود.
شما همچنین می توانید از شکل گرامری زیر برای اجرای shell script خود استفاده کنید:
Bash &nbsh;&nbsh; your-shell-program-name یا
/bin/sh &nbsh;&nbsh; your-shell-program-name
به عنوان مثال:
$ bash first
$ /bin/sh first
توجه داشته باشید برای اجرای script، شما نیاز دارید که در همان دایرکتوریی باشید که ان را ایجاد کرده اید، اگر در دایرکتوری دیگری باشید script شما اجرا نخواهد شد.(به علت ویژگی های path)
به عنوان مثال فرض کنید دایرکتوری home شما /home/vivek باشد.(از فرمان $ pwd برای مشاهده دایرکتوری فعال جاری استفاده کنید) و شما یک script با نام first ایجاد می کنید.پس از اجرای ان به دایرکتوری دیگری مانند /home/vivek/Letters/Personal می روید،حال اگر بخواهید script خود را اجرا کنید، مسلما اجرا نخواهد شد زیرا script شما در دایرکتوری /home/vivek است، برای غلبه بر چنین مشکلی دو راه وجود دارد:
اول اینکه هر زمان که خواستید script خود را در دایرکتوری های دیگری اجرا کنید، مسیر کامل ان را مشخص کنید.مثلا با دادن فرمان زیر:
$ /bin/sh/home/vivek/first
در این حالت شما مجبورید در حالیکه در دایرکتوری دیگری کار می کنید تمام این جزئیات را بدهید، که این کار زمان می گیرد و شما مجبورید مسیر کامل را به خاطر بسپارید.
راه دیگری نیز وجود دارد.توجه داشته باشید که کلیه برنامه های قابل اجرا می توانند مستقیما بوسیله تایپ دستوراتی مانند زیر از Prompt اجرا شوند :
$ bs
$ cc myprg.c
$ cal وغیره.
هسته
هسته قلب سیستم عامل لینوکس است. منابع لینوکس و ارتباط بین سخت افزار های اصلی و جانبی را مدیریت می کند.منظور از منابع، کلیه تسهیلات و امکاناتی است که این سیستم عامل در اختیار
می گذارد.برای مثال توانایی ذخیره داده ها،چاپ داده ها توسط چاپگر، حافظه، مدیریت فایل و غیره.
هسته تصمیم می گیردکه چه کسی، کی و برای چه مدت از این منابع استفاده خواهد کرد.
همچنین این اطمینان را می دهد که فرایندها و از جمله فرایند های سرور،دقیقا در زمان صحیح آغاز شده و پایان یابند.هسته وظایف مهم دیگری نیز دارد .برای شروع تنها کافیست بدانیم که هسته مهمترین فایل سیستم است.
SHELL
زبانی که کامپیوتر درک می کند زبانی از 0 و 1 ها است که زبان دودویی نامیده می شود.دستورات کامپیوتری در واقع با همین زبان دودویی_که خواندن و نوشتن آن برای تمامی ما مشکل است_سر و کار دارند.به این ترتیب برنامه خاصی در سیستم عامل وجود دارد که shell نامیده می شود.shell دستورات و فرامین را به زبان انگلیسی می پذیرد و سپس آن را به زبان کامپیوتر یعنی همان زبان دودویی ترجمه
می کند.
Shell یک مفسر زبان دستوری است که دستوراتی را که از ابزار ورودی استاندارد(صفحه کلید) و یا فایل خوانده است، اجرا می کند.لینوکس معمولا از یکی از متدوال ترین shell های زیر استفاده می کند.(در
MS-DOS ،COMMAND.COM همان SHELL است که اهداف مشابهی دارد اما به اندازه SHELL در لینوکس قدرتمند نیست.)
نام shell : توضیح
BASH(Bourne-Again SHell) :متداول ترین shell در لینوکس
CSH(C SHell) :گرامر و طرز استفاده از CSH بسیار مشابه زبان برنامه نویسی C است.
و KSH(Korn SHell)
انواع SHELL (به طور کلی)
همان گونه که افراد زبان ها و لهجه های متفاوتی را می شناسند، کامپیوتر نیز با انواع مختلفی از
SHELL ها سر و کار دارد:
• Sh یا Shell Bourne :shell اولیه که هنوز در سیستم های یونیکس و محیط های وابسته به یونیکس استفاده می شود.این shell پایه است،برنامه ای است کوچک با ویژگی هایی اندک.
• Bash یا SHell) (Bourne Again :shell استاندارد GNU.احتمالا بهترین نوع برای استفاده توسط کاربران مبتدی. علاوه بر اینکه ابزاری قدرتمند برای کابران پیشرفته و حرفه ای محسوب
می شود.در لینوکس bash ،shell استاندارد برای کاربران عمومی است.این نوع shell می تواند
جایگزین نوع Bourne شود و این بدان معنی است که دو نوع shell مذکور با یکدیگر قابل مقایسه
هستند:دستوراتی که در Shell نوع Sh عمل می کنند، در bashنیز کار می کنند.در حالیکه عکس
این مطلب همیشه درست نیست.
• csh یا shell C :همانگونه که گفته شد، از لحاظ نحوی(دستوری) این نوع مشابه زبان برنامه نویسی C می باشد.گاهی اوقات مورد استفاده برنامه نویسان قرار می گیرد.
• tcsh یا shell turbo C :جانشین shell عمومی C، که سرعت آن افزایش یافته است.
• Ksh یا shell Korn: جانشین shell Bourne با پیکربندی استاندارد و کابوسی برای کاربران مبتدی.
هر یک از انواع ذکر شده دستورات کاربر را می خواند(از طریق صفحه کلید یا ماوس) و به سیستم عامل لینوکس می گوید که کاربر چه چیزی می خواهد.
برای این که بدانید از کدام نوع shell استفاده می کنید، دستور زیر را تایپ کنید :
$ echo $SHELL
طریقه استفاده از SHELL
برای استفاده از shell ( شما به محض log in کردن به سیستم شروع به استفاده از shell می کنید.) باید دستورات را تایپ کنید. در ادامه لیستی از متداولترین دستورات آمده است:
فرمان های معمول در لینوکس
توجه داشته باشید که دستورات زیر تنها برای کاربران جدید یا مبتدی است.هدف این است که اولا در صورت استفاده از این دستورات بیشتر با SHELL سیستم خود اشنا شوید و ثانیا شما به برخی از این دستورات در SHELL SCRIPT خود احتیاج دارید. اگر کمک و یا اطلاعات بیشتری را راجع به دستوری بخواهید، می توانید از دستور زیر که به عنوان مثال برای دیدن کمک و یا گزینه های مربوط به فرمان date است، استفاده کنید:
$ date - -help
یا برای دیدن کمک یا گزینه های مربوط به فرمان ls :
$ ls - -help | more
ببینید زمانی که دستورات زیر را تایپ می کنید چه اتفاقی می افتد:
$ man ls
$ info bash
فرمان های لینوکس
شکل گرامری فرمان : موارد استفاده
date : برای مشاهده تاریخ.
who : تعیین اینکه چه کسی از سیستم استفاده می کند.
pwd :دایرکتوری های مشغول به کار را چاپ می کند.
ls یا dirs :فایل های موجود در دایرکتوری جاری را فهرست می کند.
{ نام فایل } < cat : برای ایجاد فایل متنی. نکته: برای توقف یا پایان دادن به فایل کلید کنترل (CTRL) را نگه دارید و کلید D را بزنید.(CTRL+ D)
{نام فایل} cat : برای دیدن فایل های متنی.
{نام فایل} more: برای نمایش یک فایل در هر زمان به صورت full screen.
{فایل 2} {فایل 1 } mv: برای تغییر مکان و یا تغییر نام فایل یا دایرکتوری.
{فایل جدید} {فایل قدیمی} ln : برای ایجاد کپی های چند تایی از فایل با پیوند های مختلف.بعد از این دستور هر دو فایل جدید و قدیمی به یک نام ارجاع می دهند.به عبارت دیگر برای پیوند یک نام فایل به نام فایل دیگر.
فایل1 rm: برای حذف فایل.
{نام دایرکتوری} rm – rf :تمامی فایل های دایرکتوری یا زیر دایرکتوری داده شده را حذف می کند.در استفاده از این فرمان بسیار دقت کنید.
{نام فایل} chmod : برای تغییر اجازه دسترسی به فایل.
mail: می توانید mail خود را با این فرمان بخوانید.
who am i: برای مشاهده اطلاعات بیشتر راجع به کاربر جاری.
logout (یا CTRL+D) : برای خارج شدن(log out).
{نام کاربر} mail: ارسال mail به شخص دیگر.
{نام فایل} wc: برای شمارش خطوط، کلمات و حروف فایل داده شده.
{نام فایل} {کلمه مورد نظر} grep: برای جستجوی خطی که با الگوی داده شده مطابقت دارد، در فایل مشخص شده.
{نام فایل} sort –r –n –nr:برای مرتب سازی فایل به یکی از ترتیب های زیر:
- r: عکس ترتیب عادی.
- n:مرتب سازی به ترتیب عددی.
- nr:مرتب سازی به ترتیب عکس عددی.
{نام فایل} {شماره خط} tail - |+: برای چاپ اولین یا اخرین خط فایل داده شده.
{فایل2} {فایل1} cmp یا {فایل2} {فایل1} diff: برای مقایسه فایل ها.
{نام فایل} pr : برای چاپ فایل.
Processes چیست؟
Process (فرایند) هر نوع برنامه یا کاریست که توسط PC شما انجام می شود.برای مثال $ ls – IR ،یک دستور یا درخواست برای فهرست کردن فایل های موجود در دایرکتوری و تمام زیر دایرکتوری های دایرکتوری جاری شماست.این، یک نوع فرایند است.process ،یک برنامه(دستور داده شده توسط کاربر) برای انجام یک سری کارهاست.در لینوکس زمانی که شما یک process را اغاز می کنید، هر فرایند یک شماره
می گیرد،(که به ان PID یا Process-ID می گویند.) ، PID عددی از 0 تا 65535 است.
چرا به process احتیاج است؟
لینوکس یک سیستم عامل چند کاربره و چند کاره است.به این معنی که اگر بخواهید می توانید بیش از 2 فرایند را به طور همزمان اجرا کنید.به عنوان مثال برای اینکه بدانید چه تعداد فایل روی سیستم خود دارید، ممکن است دستوری مانند زیر را بدهید:
$ ls / -R | wc – l
این دستور زمان زیادی را برای جستجوی تمامی فایل های سیستم می گیرد.پس شما می توانید چنین دستوری را در background اجرا کنید یا به طور همزمان با دادن دستوری مثل:
$ ls / -R | wc –l &
علامت & در انتهای فرمان، به shell اعلام می کند که فرمان( ls / -R | wc –l) را آغاز کند و انرا در background اجرا کند و بلافاصله دستور بعدی را بگیرد.
مثال فوق یک فرایند است و عددی که توسط shell چاپ می شود PID نامیده می شود.از این PID ممکن است برای ارجاع به یک پروسه(process) در حال اجرای مشخص استفاده شود.
فرمان های مرتبط با process در لینوکس
نام فرمان : موارد استفاده
ps: برای مشاهده پروسه در حال اجرای جاری.
Kill {PID}: برای متوقف کردن هر پروسه.
ps – ag :برای گرفتن اطلاعات در مورد تمام پروسه های جاری.
Kill 0 : برای متوقف ساختن کلیه فرایند ها به جز shell.
linux-command &: برای فرایندهای background (علامت & برای قرار دادن دستور یا برنامه ای خاص در background استفاده می شود.)
توجه داشته باشید که شما تنها قادرید پروسه هایی را که خودتان ایجاد کرده اید، متوقف کنید.administrator معمولا می تواند 95-98% پروسه ها را متوقف کند.اما برخی پروسه ها نمی توانند متوقف شوند، مانند VDU.
تغییر مسیر ورودی/خروجی استاندارد
اغلب تمامی فرمان ها ،خروجی را به صفحه نمایش می دهند و ورودی را از صفحه کلید می گیرند، اما در لینوکس این امکان وجود دارد که خروجی به فایل فرستاده شود و یا ورودی از فایل خوانده شود.برای مثال فرمان $ ls خروجی را به صفحه نمایش می دهد.اما فرمان $ ls > filename خروجی را به فایل
می فرستد. معنی فرمان این است که خروجی فرمان ls را به فایل مشخص شده بفرست.
3 نماد اصلی برای تغییر مسیر وجود دارد: > و << و <.
(1) نماد تغییر مسیر <
شکل گرامری دستور: نام فایل < فرمان لینوکس
برای اینکه خروجی به فایل فرستاده شود.توجه داشته باشید که اگر فایل وجود داشته باشد،
باز نویسی می شود (با خروجی مربوط) و در غیر این صورت فایل جدیدی ایجاد می شود.
برای مثال برای فرستادن خروجی فرمان ls، دستور روبه رو را بدهید:
$ ls > myfiles
حال اگر فایل “myfiles” در دایرکتوری جاری شما موجود باشد،بدون هیچ نوع اعلام خطا بازنویسی
می شود.(در صورتی که بخواهید محتوای فایل قبلی را نیز حفظ کنید، باید از نماد تغییر مسیر بعدی استفاده کنید.)
(2) نماد تغییر مسیر <<
شکل گرامری دستور : نام فایل << فرمان لینوکس
برای فرستادن خروجی به انتهای فایل.توجه داشته باشید در صورتی که فایل وجود باشد،فایل باز خواهد شد و بدون حذف اطلاعات/داده های قبلی اطلاعات/داده ها در انتهای فایل نوشته می شوند و اگر فایل وجود نداشته باشد،فایل جدیدی ایجاد می شود.برای مثال برای فرستادن خروجی فرمان date به فایل موجود دستور روبه رو را بدهید:
$ date >> myfiles
(3) نماد تغییر مسیر >
شکل گرامری دستور : نام فایل > فرمان لینوکس
به منظور گرفتن ورودی برای فرمان لینوکس از فایل به جای صفحه کلید.
به عنوان مثال برای گرفتن ورودی از فایل برای فرمان cat، از فرم زیر استفاده کنید:
$ cat < myfiles
Pipes
Pipe راهی است برای برقراری ارتباط بین خروجی یک برنامه و ورودی برنامه ای دیگر بدون هیچ فایل موقتی.
در واقع pipe محلی موقتی برای ذخیره است که در آن خروجی یک فرمان ذخیره شده و سپس به عنوان ورودی برای فرمان بعدی عبور می کند.pipes برای اجرای بیش از دو فرمان(فرمان های چند گانه) از یک خط فرمان استفاده می شوند.
شکل گرامری فرمان: فرمان 2 |فرمان1
فرمان ها با استفاده از pipes
فرمان : مفهوم یا استفاده pipes
$ ls | more : در اینجا خروجی فرمان ls، به عنوان ورودی فرمان more در نظر گرفته می شود به طوریکه خروجی در هر زمان به صورت full screen چاپ می شود.
$ who | sort : در این حالت خروجی فرمان who به عنوان ورودی به فرمان sort داده می شود به طوریکه به صورت لیست مرتب شده ای از کاربران چاپ خواهد شد.
$ who | wc –l : در این حالت خروجی فرمان who به عنوان ورودی به فرمان wc داده می شود، به طوریکه تعداد کاربرانی را که وارد سیستم شده اند(logon کرده اند) را چاپ می کند.
$ ls –l | wc –l : اینجا خروجی فرمان ls به عنوان ورودی به فرمان wc داده می شود به طوریکه تعداد فایل ها در دایرکتوری جاری را چاپ می کند.
$ who | grep raju : در این حالت خروجی فرمان who به عنوان ورودی به فرمان grep داده می شود به طوریکه نام کاربر خاص را در صورتی که logon کرده باشد چاپ می کند و در غیر این صورت چیزی را چاپ نمی کند.
Filter
اگر فرمان لینوکس ورودی خود را به فرم استاندارد بپذیرد و خروجی اش را نیز به فرم استاندارد تولید کند، به عنوان فیلتر شناخته می شود. Filter برخی فرایند ها را روی ورودی انجام داده و خروجی را می دهد.برای مثال فرض کنید فایلی با عنوان hotel.txt با 100 خط داده، داریم و می خواهیم محتویات این فایل از خط شماره 20 تا خط 30 را چاپ کرده و نتایج را در فایلی با نام hlist ذخیره کنیم، دستور زیر را می دهیم:
$ tail +20 < hotel.txt | head –n30 >hlist
در اینجا head ، filter است که ورودی اش را از فرمان tail می گیرد ( فرمان tail با انتخاب از خط شماره 20 از فایل داده شده به عنوان مثال hotel.txt، آغاز می شود.)و خروجی آن به فایل hlist تغییر مسیر داده است.

مقدمه ای بر برنامه نویسی shell
برنامه نویسی shell مجموعه ایست از فرمان های لینوکس.shell script درست همانند فایل batch در MS_DOS است اما قدرت بیشتری دارد.shell script قادر است ورودی را از کاربر و یا فایل گرفته و خروجی را روی صفحه نمایش نشان دهد.و همچنین برای ایجاد فرامین خاص کاربر _که می توانند به میزان زیادی در زمان صرفه جویی کنند و بسیاری از کارهای روزمره را به طور خودکار انجام دهند _ مفید می باشد.
متغیر ها در لینوکس
گاهی اوقات برای پردازش داده/اطلاعات باید آنها را در حافظه RAM نگهداری کرد.حافظه RAM به مکان های کوچکی تقسیم شده است، و هر مکان یک عدد منحصر به فرد دارد که مکان یا ادرس حافظه نامیده
می شود، و برای نگهداری داده ها استفاده می شود.برنامه نویس می تواند یک نام یکتا به این مکان های حافظه بدهد که متغیر های حافظه یا به طور خلاصه متغیر نامیده می شوند.(این ها در واقع مکان های حافظه دارای نام می باشند که ممکن است مقادیر مختلفی داشته باشند، اما در یک زمان می توانند تنها یک مقدار داشته با شند.)
در لینوکس 2 نوع متغیر داریم:
1) متغیر های سیستمی : توسط خود لینوکس ایجاد و نگهداری می شوند.این نوع متغیر ها با حروف بزرگ تعریف می شوند.
2) متغیر های تعریف شده توسط کاربر(UDV) : توسط کاربر ایجاد و نگهداری می شوند.این نوع متغیر ها با حروف کوچک تعریف می شوند.
برخی از متغیر های سیستمی
شما می توانید متغیرهای سیستمی را با دادن دستور $ set ،مشاهده کنید.برخی از مهمترین متغیر های سیستمی عبارتند از:
BASH=/bin/bash : نام shell
BASH_VERSION=1.14.7(1) : نام ورژن shell
COLUMNS=80 : تعداد ستون های صفحه نمایش
HOME=/home/vivek : دایرکتوری HOME
LINES=25 : تعداد سطرهای صفحه نمایش
LOGNAME=students : نام logging
OSTYPE=Linux : نوع سیستم عامل
PATH=/usr/bin:/sbin:/bin:/usr/sbin : وضع ظاهری PATH
PS1=[\u@\h\W]\$ : وضع ظاهری prompt
PWD=/home/students/Common : دایرکتوری در حال فعالیت جاری
SHELL=/bin/bash : نام shell
USERNAME=vivek : نام کاربری فردی که هم اکنون وارد سیستم شده است.
توجه داشته باشید که برخی از موارد فوق ممکن است در کامپیوتر شما متفاوت باشند. شما می توانید محتوای هر یک از متغیر های فوق را مانند زیر چاپ کنید:
$ echo $USERNAME
$ echo $HOME
توجه:متغیر های سیستمی را تغییر ندهید.این موضوع گاهی سبب ایجاد مشکلاتی می شود.
چگونه متغیر های تعریف شده توسط کاربر را تعریف کنیم؟
برای تعریف UDV از شکل گرامری زیر استفاده کنید:
مقدار = نام متغیر
نکته: در این جا 'مقدار' به نام متغیر تخصیص داده می شود و مقدار باید در سمت راست علامت = قرار گیرد.مثال های زیر را در نظر بگیرید:
$ no=10 # این مثال درست است
$ 10=no #این مورد اشتباه است. خطا:
برای تعریف متغیری با نام 'vech' با مقدار Bus :
$ vech=Bus
برای تعریف متغیری با نام n با مقدار 10 :
$ n=10
قواعد نام گذاری متغیر ها برای هر دو نوع متغیر های (UDV) وسیستمی
1) نام متغیر باید با یک کارکتر حرفی یا عددی و یا نماد خط زیر ( _ ) اغاز شود که به دنبال ان یک یا تعداد بیشتری حروف عددی می اید. برای مثال متغیر های shell زیر صحیح هستند:
HOME
SYSTEM_VERSION
vech
no
2) هنگام تخصیص مقدار به متغیر در هیچ یک از دو طرف علامت مساوی فاصله ندهید.به عنوان مثال در اعلان متغیر زیر هیچ خطایی رخ نداده است:
$ no=10
اما موارد زیر اشکال دارند:
$ no =10
$ no= 10
$ no = 10
3) متغیر ها درست مثل نام فایل در لینوکس نسبت به کوچکی و بزرگی حروف حساسند.
(case-sensitive). مثال های زیر را در نظر بگیرید:
$ no=10
$ No=11
$ NO=20
$ nO=2
هر یک از متغیر های فوق با دیگری متفاوت است.بنا بر این برای چاپ مقدار 20 ما مجبوریم از
$ echo $NO استفاده کنیم.و هیچ یک از دستورات زیر برای این منظور به کار نمی روند.
$ echo $no 10را چاپ خواهد کرد نه 20 را #
$ echo $No #11 را چاپ خواهد کرد نه 20 را
$ echo $nO #2 را چاپ خواهد کرد نه 20 را
4) شما می توانید متغیر تهی را مانند زیر تعریف کنید.(متغیر تهی متغیری است که در زمان تعریف هیچ مقداری ندارد.) به عنوان مثال
$ vech=
$ vech=””
چاپ مقدار این متغیر را امتحان کنید.$ echo $vech ،در این حالت هیچ چیز نمایش داده نمی شود زیرا متغیر هیچ مقداری ندارد.
5) از کارکتر هایی مثل ? ، * و غیره برای نامگذاری متغیرتان استفاده نکنید.
چگونه به مقادیر UDV دسترسی داشته باشیم یا آنها را چاپ کنیم؟
برای چاپ یا دسترسی به UDV از شکل گرامری زیر استفاده کنید:
نام متغیر$
به عنوان مثال برای چاپ محتوای متغیر vech :
$ echo $vech
فرمان فوق 'bus ' را چاپ می کند(اگر قبلا به صورت vech=bus تعریف شده باشد.)، برای چاپ محتوای متغیر 'n ' $ echo $n ، '10' را چاپ می کند.(اگر قبلا به صورت n=10 تعریف شده باشد.)
توجه: از $ echo vech استفاده نکنید،این فرمان vech را به جای مقدارش یعنی 'Bus' چاپ می کند و
$ echo n ، n را به جای مقدارش یعنی '10' چاپ می کند.شما باید از $ که به دنبالش نام متغیر
آمده است استفاده کنید.
پرسش و پاسخ
سئوال1: چگونه متغیر x با مقدار 10 را تعریف کرده و انرا در صفحه نمایش چاپ کنیم؟
$ x=10
$ echo $x
سئوال 2: چگونه متغیر xn با مقدار Rani را تعریف کرده و انرا در صفحه نمایش چاپ کنیم؟
$ xn=Rani
$ echo $xn
سئوال 3: چگونه مجموع دو عدد را چاپ کنیم؟( دو عدد را 3 و 6 در نظر بگیرید)
$ echo 6+3
این فرمان چاپ می کند 3+6 ، و مجموع ان دو یعنی 9 را چاپ نمی کند.برای جمع یا عملیات ریاضی در shell از expr استفاده کنید.شکل گرامری ان به صورت زیر است:
expr op1 operator op2
که در آن op1 و op2 هر دو می توانند اعداد صحیحی باشند(عدد صحیح: بدون قسمت اعشار) و operator یا عملگر می تواند یکی از عملگرهای جمع (+) ، تفریق (-) ، تقسیم ( / )، ضرب( \*) و
mod ( %) باشد که % برای محاسبه باقیمانده استفاده می شود.به عنوان مثال 20 / 3 = 6 و
20 % 3 = 2.
$ expr 6 + 3
حال این فرمان 9 را به عنوان جمع دو عدد چاپ می کند. ولی $ expr 6+3 عمل نمی کند زیرا بین عملگر و عدد باید فاصله باشد.
سئوال4: چگونه دو متغیر x=20 و y=5 را تعریف و سپس تقسیم x بر y را چاپ کنیم؟
$ x=20
$ y=5
$ expr x / y
سئوال5: مثال فوق را تغغیر داده و حاصل تقسیم را در متغیری با نام z ذخیره کنید.
$ x=20
$ y=5
$ z=’ expr x / y ‘
$ echo $z
نکته:در مورد دستور سوم بعدا توضیح می دهیم.
چگونه shell script بنویسیم؟
اکنون ما اولین script خود را می نویسیم که نتیجه آن چاپ 'knowledge is power' بر روی صفحه نمایش می باشد. برای نوشتن shell script می توانید از ویرایشگر متنی لینوکس مانند vi یا mcedit استفاده کنید و یا حتی می توانید از فرمان cat استفاده کنید.در اینجا ما از فرمان cat استفاده می کنیم،شما می توانید از هر یک از ویرایشگر های فوق استفاده کنید.ابتدا فرمان cat زیر و ادامه متن را تایپ کنید:
$ cat > first
#
# My first shell script
#
clear
echo ' knowledge is power'
Ctrl + D را برای ذخیره بزنید.اکنون script شما آماده است برای اجرای ان فرمان زیر را تایپ کنید:
$ ./first
در این حالت سیستم اعلام خطا می کند.زیرا ابتدا اجازه اجرا را برای اولین script خود تنظیم نکرده ایم.برای انجام این کار فرمان زیر را تایپ کنید:
$ chmod +x first
$ ./first
ابتدا صفحه نمایش پاک می شود، سپس knowledge is power بر روی صفحه چاپ می شود.برای چاپ پیغامی از محتوای متغیر ها از فرمان echo استفاده می کنیم، شکل کلی فرمان echo به صورت زیر است:
echo 'Message'
echo ' Message variable1, variable2…variableN'
چگونه shell script را اجرا کنیم؟
به علت امنیت فایل ها در لینوکس، ایجاد کننده shell script به صورت پیش فرض اجازه اجرای آن را ندارد.
بنابراین اگر مایل به اجرای ان باشیم باید 2 کار زیر را انجام دهیم:
1) استفاده از دستور chmod به صورت زیر برای دادن اجازه اجرا به script .شکل گرامری ان به صورت زیر است:
chmod +x shell-script-name یا
chmod 777 shell-script-name
2) اجرای script به صورت زیر:
./your-shell-program-name
به عنوان مثال:
$ ./first
در اینجا نقطه (.) فرمان محسوب می شود و به صورت ترکیب با shell script استفاده می شود.نقطه به shell جاری اشاره می کند که فرمان پس از ان(.) باید در همان shell اجرا شود و shell دیگری نباید در حافظه بار شود.
شما همچنین می توانید از شکل گرامری زیر برای اجرای shell script خود استفاده کنید:
Bash &nbsh;&nbsh; your-shell-program-name یا
/bin/sh &nbsh;&nbsh; your-shell-program-name
به عنوان مثال:
$ bash first
$ /bin/sh first
توجه داشته باشید برای اجرای script، شما نیاز دارید که در همان دایرکتوریی باشید که ان را ایجاد کرده اید، اگر در دایرکتوری دیگری باشید script شما اجرا نخواهد شد.(به علت ویژگی های path)
به عنوان مثال فرض کنید دایرکتوری home شما /home/vivek باشد.(از فرمان $ pwd برای مشاهده دایرکتوری فعال جاری استفاده کنید) و شما یک script با نام first ایجاد می کنید.پس از اجرای ان به دایرکتوری دیگری مانند /home/vivek/Letters/Personal می روید،حال اگر بخواهید script خود را اجرا کنید، مسلما اجرا نخواهد شد زیرا script شما در دایرکتوری /home/vivek است، برای غلبه بر چنین مشکلی دو راه وجود دارد:
اول اینکه هر زمان که خواستید script خود را در دایرکتوری های دیگری اجرا کنید، مسیر کامل ان را مشخص کنید.مثلا با دادن فرمان زیر:
$ /bin/sh/home/vivek/first
در این حالت شما مجبورید در حالیکه در دایرکتوری دیگری کار می کنید تمام این جزئیات را بدهید، که این کار زمان می گیرد و شما مجبورید مسیر کامل را به خاطر بسپارید.
راه دیگری نیز وجود دارد.توجه داشته باشید که کلیه برنامه های قابل اجرا می توانند مستقیما بوسیله تایپ دستوراتی مانند زیر از Prompt اجرا شوند :
$ bs
$ cc myprg.c
$ cal وغیره.
منبع : www.manvatoo.com
+ نوشته شده در ساعت 8:42 PM توسط علی خازنی [مدیر]
|