کلاس آموزش اسکریپت نویسی

مباحث مربوط به زبان های برنامه نویسی در لینوکس

کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » سه شنبه اسفند 6, 87 5:13 pm

این تایپیک رو راه انداختم تا کنار هم دیگه و قدم به قدم از سطح مقدماتی ( در حد صفر :D ) شروع به یادگیری اسکریپت نویسی کنیم

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

خوب اول از همه باید ببینیم اسکریپت چیه و چه کاری میکنه ؟

اسکریپت نویسی ( ShellScripting ) به فایلی میگن که شامل تمام دستورهایی که شما روزانه مجبورین اونا رو توی محیط ترمینال وارد و تکرار کنید

واسه شروع کار یه new file روی دسکتاپ درست کنید و اسمشو test.sh بزارید

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

کد: گزینش همه
#!/bin/sh


و بعد دستور زیر رو توی ترمینال وارد کنید تا فایل مورد نظرمون حالت اجرایی بگیره

کد: گزینش همه
chmod +x test.sh


,,, پس همیشه اولین خط اسکریپت شامل کد بالا میشه ,,,

البته دقت کنید قبل از وارد کردن دستور chmod +x test.sh باید از دستور cd Desktop استفاده کنید چون فایلتون روی دسکتاپه

خوب حالا میرسیم به خط بعدی

اگه میخواین با اجرای اسکریپت یه پیغام روی صفحه ی ترمینال نمایش داده بشه قبل از جمله ی مورد نظر یه echo قرار بدین و بعد جملتون رو بنویسید

کد: گزینش همه
echo Khuzestan lug


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

کد: گزینش همه
./test.sh


یادتون نره قبل از اینکه فرمان بالا رو اجرا کنید با دستور cd Desktop باید به دایرکتوری دسکتاپ برید
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

The following 5 users would like to thank moslem.b for his or her post:
farshid, itline, NabiKAZ, narcissus, totia

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » چهار شنبه اسفند 7, 87 5:44 pm

خوب میرسیم به قسمت شرط و شروط سعی میکنم عامیانه بگم که واسه همه قابل فهم باشه

بعضی وقت ها باید از کاربر بپرسید که کدوم یکی از کارهایی رو که شما براش در نظر گرفتید رو میخواد انجام بده ؟
چون ممکنه اسکریپت شما توانایی انجام چند تا کار رو داشته باشه مثلا نصب یک نرم افزار و در کنارش پشتیبان گیری از یه فایل خاص
اینجوری شما باید قبل از هر کاری از کاربر سوال کنید که کدوم کار رو میخواد انجام بده و طبق گذینه هایی که براش معین میکنید یکی رو انتخاب کنه و دستور مربوطه انجام بشه

با یه مثال ساده شروع میکنیم

کد: گزینش همه
#!/bin/sh


echo please choose 1 or 2
echo ----------------------
echo 1- run firefox
echo
echo 2- run pidgin
echo ----------------------

read name

if [ $name = "1" ]
then
firefox
elif [ $name = "2" ]
then
pidgin
else
        echo "I dont know this number"
fi


خوب echo ها رو که میدونید چی کار میکنن

read name هم همیشه واسه متغییرهای شرطی نوشتنش واجبه

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

کد: گزینش همه
if [ $name = "1" ]


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

elif هم واسه موقعی هست که بیش از یک شرط رو داشته باشین مثل مثالی که چند خط بالاتر گفتم اونجا ما دوتا شرط تعیین کردیم که اگه کاربر 1 بزنه یه فرمان اجرا بشه و اگه 2 بزنه یه فرمان دیگه اجرا بشه

else هم واسه این بکار میره که اگه بجز مواردی که ما برای کاربر تعیین کردیم حرف یا کلمه ی دیگه ی رو وارد کنه با نشون دادن پیغام بهش بگه که که ورودی شما اشتباهه مثلا اگه داخل مثال بالا شما بجای 1 یا 2 عدد یا حرغ دیگه ای رو انتخاب کنید با نشون دادن پیغام I dont know this number به شما میگه که ورودی شما رو نمیتونه پیدا کنه

اون fi آخری هم همیشه باید همون آخر قرار بگیره

یه چیزی هم یادم رفته بود که بگم اگه توی فرمانی که توی اسکریپت مینویسین علامت # رو بزارید نه اجرا میشه نه توی ترمینال نشونش میده فقط بصورت توضیحات هستش

فکر کنم عامیانه تر از این نشه توضیح داد یکمم زیادی عامیانه شده :mrgreen:

لطفا دوستان اگه اشکالی یا نقصی توی مطالب میبینن حتما بگن ممنون میشم

خوب یه سوال هم خودم دارم چرا توی بعضی از اسکریپت ها بجای اون خط اول که نوشته bin/sh/!# مینویسن bin/bash/!#
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز OA7 » چهار شنبه اسفند 7, 87 7:28 pm

moslem.b نوشته است:خوب یه سوال هم خودم دارم چرا توی بعضی از اسکریپت ها بجای اون خط اول که نوشته bin/sh/!# مینویسن bin/bash/!#

سلام
به این میگن مفسر
اولی مفسرش sh هست دومی bash هست
حالا این دو نوع پوسته (یا همون شل) هستند که ما برای تفسیر دستورات از اونها استفاده میکنیم
هر پوسته خاصیت های خودشو داره که با توجه به خاصیت اون پوسته ازش استفاده میشه
باز هم توصیه من اینه که اون مقاله رو بخونید حتمآ به نتایج خوبی خواهید رسید
http://khuzestanlug.ir/forum/viewtopic.php?f=18&t=82#p778
موفق باشی
یا علی
Last edited by OA7 on پنج شنبه اسفند 7, 87 12:07 am, edited 1 time in total.
سیما
OA7
مسئول آموزش
 
نوشته: 73
پیوستن: آدینه دی 6, 87 5:48 pm
Given: 16 thanks
Received: 58 thanks

The following 2 users would like to thank OA7 for his or her post:
moslem.b, totia

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » چهار شنبه اسفند 7, 87 8:21 pm

0A7 نوشته است:
moslem.b نوشته است:خوب یه سوال هم خودم دارم چرا توی بعضی از اسکریپت ها بجای اون خط اول که نوشته bin/sh/!# مینویسن bin/bash/!#

سلام
به این میگن مفسر
اولی مفسرش sh هست دومی bash هست کتابهایی که گذاشتم رو میخوندی این سوالت بر طرف میشد !
بر خلاف کسایی که جنبه تفریح و بحث رو در لاگ پیش گرفتن به نظر این کاری که داری انجام میدی یخورده زوده ... :!: :idea:
بهتره از آموزش های پایه ای شروع بشه
به هر حال موفق باشی
یا علی


من دارم اسکریپت نویسی رو یاد میگیرم این تایپیک رو زدم تا هم هر چیزی رو یاد گرفتم یاد بقیه بدم هم اینکه سوالات خودمو بپرسم
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

The following user would like to thank moslem.b for his or her post:
totia

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز rosenth » چهار شنبه اسفند 7, 87 9:28 pm

0A7 جان.
یادگیری اینجور موارد اون پیوستگی که با خوندن کتاب پیشنهاد کردی رو نیاز نداره. باید کوچیک کوچیک از اینور و اونور چیزایی که نیاز داریم رو یاد بگیریم وگرنه خسته کننده میشه
rosenth

 
نوشته: 132
پیوستن: سه شنبه دی 3, 87 10:50 am
شهر: اهواز
Given: 15 thanks
Received: 57 thanks

The following user would like to thank rosenth for his or her post:
totia

نوشتهاز moslem.b » چهار شنبه اسفند 7, 87 9:37 pm

rosenth نوشته است:0A7 جان.
یادگیری اینجور موارد اون پیوستگی که با خوندن کتاب پیشنهاد کردی رو نیاز نداره. باید کوچیک کوچیک از اینور و اونور چیزایی که نیاز داریم رو یاد بگیریم وگرنه خسته کننده میشه


این 0A7 رو اگه من دستم بش برسه میدونم چی کارش کنم :mrgreen:

به زور باید بکشونمش اینجوری نگاش نکن خدای اسکریپته ;)
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

The following user would like to thank moslem.b for his or her post:
totia

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز OA7 » پنج شنبه اسفند 7, 87 12:06 am

با سلام
اول از همه اینکه مسلم جان به من لطف داره الکی بزرگش میکنه
بعد اینکه در مورد حرف rosenth جان باید بگم که یادگیری شل اسکریپت بسیار وابسته به یادگیری و فهم دقیق دستورات در لینوکس هست بعد اون e-book که من معرفی کردم هم اونقدر طولانی نبود که کسی خسته بشه تعداد صفحاتش رو ببینید متوجه میشید
پست قبلی رو ویرایش کردم
به هر حال هر کمکی از من بر بیاد در خدمتم
ممنون یا علی
سیما
OA7
مسئول آموزش
 
نوشته: 73
پیوستن: آدینه دی 6, 87 5:48 pm
Given: 16 thanks
Received: 58 thanks

The following 2 users would like to thank OA7 for his or her post:
moslem.b, totia

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » آدینه اسفند 9, 87 8:50 am

خوب اینبار با یه دستور پرکاربرد شروع میکنیم

دستور copy & past

واسه اینکه یه فایل رو از جایی به جای دیگه کپی کنیم باید از cp استفاده کنیم

مثال زیر رو نگاه کنید

کد: گزینش همه
cp /boot/grub/menu.lst /home/mse/Desktop


من فایل menu.lst رو از آدرس boot/grub/ کپی کردم روی دسکتاپم ( اون mse اسم یوزر منه شما باید اسم یوزر خودتونو بنویسید )

اگه دقت کنید ساختار دستور به این شکله که یه cp مینویسید و یه فاصله میزارید بعدش محل فایل مورد نظر رو مینویسید و یه فاصله دیگه میزارید و آدرس جایی که قراره فایل کپی بشه رو مینویسید

ولی اگه بخواین یه پوشه رو کپی کنید باید از دستور cp -r استفاده کنید

کد: گزینش همه
cp -r /boot/grub /home/mse/Desktop


یه ترفند جالب : شما با همین دستور میتونید دو تا کار رو انجام بدید

1- انتقال فایل که توی قسمت بالا یاد گرفتیم

2- تغییر نام فایل در حین جابجایی

واسه اینکه فایلتون رو تغییر نام بدید کافی بعد از آدرس مقصد یه ( / ) بزارید و اسم فایل رو + پسوندش رو بنویسید

مثل این

کد: گزینش همه
cp /boot/grub/menu.lst /home/mse/Desktop/aaa.lst


همونجور که میبینید اسم فایل رو از menu به aaa تغییر دادم

یادتونه گفته بودم واسه اجرای اسکریپت از دستور test.sh/. باید استفاده کنید ؟

گاهی اوقات پیش میاد که دستوراتی رو که توی اسکریپت مینویسید نیاز به دسترسی روت داره واسه حل این مشکل کافیه قبل از test.sh/. یه sudo اضافه کنید به این شکل

کد: گزینش همه
sudo ./test.sh
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز OA7 » شنبه اسفند 9, 87 1:13 am

moslem.b نوشته است:مثال زیر رو نگاه کنید

کد: گزینش همه
cp /boot/grub/menu.lst /home/mse/Desktop


من فایل menu.lst رو از آدرس boot/grub/ کپی کردم روی دسکتاپم ( اون mse اسم یوزر منه شما باید اسم یوزر خودتونو بنویسید )

سلام
مسلم میتونی از کد زیر استفاده کنی که روی سیستم های مختلف جواب بده
کد: گزینش همه
cp /boot/grub/menu.lst /home/$USER/Desktop

USER یک متغیر محیطی هست که اسم یوزر فعلی رو نمایش میده که با استفاده از اون نیازی نیست که کاربر اسم یوزر رو وارد کنه
موفق باشی
سیما
OA7
مسئول آموزش
 
نوشته: 73
پیوستن: آدینه دی 6, 87 5:48 pm
Given: 16 thanks
Received: 58 thanks

The following user would like to thank OA7 for his or her post:
moslem.b

Re: کلاس آموزش اسکریپت نویسی

نوشتهاز narcissus » شنبه اسفند 9, 87 2:43 am

moslem.b نوشته است:
خوب یه سوال هم خودم دارم چرا توی بعضی از اسکریپت ها بجای اون خط اول که نوشته bin/sh/!# مینویسن bin/bash/!#


در این رابطه اینو دیدم به نظرم جالب امد :


کد: گزینش همه
Some typical interpreters for shebang lines:

    * #!/bin/bash — Execute using the Bourne-again shell
    * #!/bin/bash -c '/bin/bash' — Execute using bash in the /bin/ directory, and calls bash inside the /bin/
    * #!/bin/csh — Execute using csh, the C shell
    * #!/bin/ksh — Execute using the Korn shell
    * #!/bin/awk -f — Execute using awk program in the /bin/ directory; the -f is necessary; otherwise awk will think its argument is the awk program itself rather than a file that contains it
    * #!/bin/sh — On some systems, such as Solaris, this is the Bourne shell. On Linux systems there is usually no Bourne shell and this is a link to another shell, such as bash. According to the Single UNIX Specification's requirements for /bin/sh, such a shell will usually mimic the Bourne shell's behaviour, but be aware that using #!/bin/sh in shell scripts may invoke different Bourne-compatible shells on different systems.
    * #!/bin/zsh — Execute using zsh, the Z shell
    * #!/usr/bin/perl — Execute using Perl
    * #!/usr/bin/php — Execute using PHP. Note: since in PHP the shebang line falls outside the "code block" (<?php ?>), it doesn't act as a comment, so PHP must explicitly ignore it.
    * #!/usr/bin/python — Execute using Python
    * #!/usr/bin/lua — Execute using Lua
    * #!/usr/bin/env — Invocation of some other program using env program in /usr/bin directory
    * #!/usr/bin/ruby — Execute using Ruby
    * #!/usr/bin/tclsh — Execute using Tcl
    * #!/usr/bin/emacs --script — Execute using Emacs, need Emacs 22.


http://en.wikipedia.org/wiki/Shebang_(Unix)
first they ignore you
then they laugh at you
then they fight you
then you win
narcissus

 
نوشته: 224
پیوستن: شنبه دی 7, 87 3:33 pm
شهر: دزفول
Given: 25 thanks
Received: 69 thanks

The following 2 users would like to thank narcissus for his or her post:
moslem.b, OA7

پس

برگشت به برنامه نویسی

اکنون هست

;کسانی که اکنون در این تالار هستند: کاربری نام ننوشته است کاربر و 4 میهمان

cron