اگر هر کسی در هر موردی سوال ومشکلی داری

تو نظرات بگین تا انجام بدم

 

 

 

 

 

 

منتظر پست های جدید ما باشید

 

 

 

 

نظر بدهید

 

 

 

 

 

 

 

آموزش لینوکس _ قسمت نهم

آموزش لینوکس _ قسمت نهم _ برنامه نویسی shell

مقدمه ای بر برنامه نویسی 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@hW]$ : وضع ظاهری 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 وغیره.

منبع : اینترنت