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

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

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

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

نوشتهاز OA7 » شنبه اسفند 10, 87 7:32 am

narcissus نوشته است:
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)
0A7:لینک اگر داخل url قرار نگیره ممکن درست اجرا نشه

سلام
با توجه به پستی که داده شد لازم شد اینرو هم بگم که مفسر شما میتونه مفسر یک زبان برنامه نویسی یک ادیتور یا یک پوسته و.... باشه
برای مثال پوسته هایی مثل ash,csh,zsh,tcsh,....
زبان های برنامه نویسی ,awk,perl,peython,ruby,......
ادیتور مثل nano,emacs,vi,.....
و خیلی چیز های دیگه باید ببینی به چه چیزی نیاز داری
موفق باشید
یا علی
سیما
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:
farshid, moslem.b

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

نوشتهاز moslem.b » شنبه اسفند 10, 87 8:42 pm

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

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

فرض کنید میخواین روی دسکتاپ پوشه ای به اسم Linux درست کنید کافیه به شکل زیر عمل کنید

کد: گزینش همه
mkdir /home/$USER/Desktop/Linux


به همین سادگی فکر کنم انقدر واضح بود که نیاز به توضیح بیشتری نداشته باشه

تنها مشکلی که این دستور داره اینه که اگه با sudo اجراش کنید کار نمیکنه چون اونجوری بجای یوزر شما یوزر روت رو توی دستور اعمال می کنه اگه دوستان راهی سراغ دارن لطف کنن به ما هم بگن تا این مشکل رفع بشه چون بعضی موقع ها نیازه که کل اسکریپت با sudo اجرا بشه
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: کلاس آموزش اسکریپت نویسی

نوشتهاز narcissus » چهار شنبه اسفند 14, 87 3:34 am

مواد لازم براس شروع Shell Script نویسی : ;)


اطلاعات از کرنل
اطلاعات از شل (پوسته متنی )
اطلاعات از پردازش
اطلاع در باره تغیر مسیر دادن و تونل ها و فیلتر (Redirectors , Pipes, Filters ) ...... :idea:

کرنل چیه :

کرنل قلب لینوکسه .کرنل منابع سیستم عامل را مدیریت میکنه . منابع سیستم عامل مثل پرینتر و حافظه و پردازنده و ...

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

مدیرییت I/O ( ورودی خروجی ها )
مدیریت پردازنده
مدیریت وسیله ها
مدیریت فایل‌ها
و مدیریت حافضه (اصلی و جانبی )

shell چیه :

زبانی که کامپیوتر متوجه میشه زبان صفر و یک هست ولی استفاده از آن و خواندن و نوشتن آن برای ما سخته ( کی میتونه هر روز صبح به خیر را تبدیل به صفر و یک کنه ؟ ;) )
بنا بر این در سیستم عاملمون یه برنامه ویژه به نام sell و جود داره شل فرمانهای شما را میگیره و اونها رو به زبان مادر زادی کامپیوتر ترجمه میکنه ( عجب مترجم خوبی :idea: ) شل یک مفسر فرمانه که فرمانها را از وسایل ورودی ( کیبرد ) میخونه و اجرا میکنه .

سیما

سیما

ولی ما کلی shell های جورواجور داریم که لینوکس ممکنه از چند تا از شل های معروف استفاده کنه .
تو این لینک مشخصات یک سری از شل ها امده : ( مسابقه :!: )

کد: گزینش همه
http://en.wikipedia.org/wiki/Comparison_of_command_shells


توی داس و ویندوز این پوسته و یا shell ما COMMAND.COM نام داره که به مقصود مشابهی اسفاده میشه ولی به قدرتمندی شل لینوکس نیست .(اصلا و ابدا :twisted: )



سوال : و اما از shell چجور استفاده میکنند .( خوب این‌ام حرفیه ؟!)
جواب : با استفاده از commands (دستور )از شل استفاده میکنند .

دستورایی مثل

کد: گزینش همه
ls
ls -a
who
cp
pwd


کسایی که با داس کار کردن این چیزا براشون آشنا تره اونجا هم برا خودش دستورایی داشت مثل

کد: گزینش همه
dir
data
.........


در باره پردازش دستورات و برنامه‌ها هم باید دانست :

توی لینوکس وقتی یک برنامه اجرا میشه و در حال پردازشه , به آن پردازش یک عدد داده میشه PID (process-id) شما با دستور ps میتونید لیست پردازشهایی که الان دارن اجرا میشن را ببینید و با دستور kill پردازشی که به وجود آوردید را از کار بندازید . یعنی

IPD-شماره پردازش kill

کد: گزینش همه
$ kill 102






و اما !

Redirection :

وقتی یک دستور را اجرا میکینید معمولاً ورودی های اون دستور لازم داره از طریق صفحه‌کلید بهش میدید و خروجیهاشم توی شل میبینید روی صفحه.

ولی همه چی اینجوری نمیمونه :idea: . شما میتونید ورودی هاتونو از یه فایل متنی بگیرید و خروجیهاتون را در یک فایل متننی نمایش بدید .

برای این کار از یک سری علاعم استفاده میکنند .یعنی :

کد: گزینش همه
>>
<
>


میپرسید این علاعم چجور استفاده میشه خوب این‌هم یه مثال :

نام فایل < دستور

این رو در ترمینال بزنید :
کد: گزینش همه
man ls > azmayeshi


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

Pips :

و اما ممکنه بخواید خروجی یک دستور را ورودی دستور دیگه قرار بدید .
که اینجا از
| استفاده میکنند

دستور دوم | دستور اول


کد: گزینش همه
ls | more



Filter
:

و دیگه اینکه میتونیم ورودی و خروجیمونو کنترل کنیم
مثل اینکه شما بخواید یک فایل را چاپ کنید ولی نه همه ی صفحه هاشو بلکه صفحه های مورد نظر خودتونو . خروجی یک دستور هم میتونید کنترل کنید .

حالا میدونیم کجای کاریم :D
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 4 users would like to thank narcissus for his or her post:
farshid, moslem.b, NabiKAZ, totia

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

نوشتهاز moslem.b » چهار شنبه اسفند 14, 87 5:58 am

moslem.b نوشته است:با تشکر از دوستان گلم که واسه ارتقاء سطح کیفی این تایپیک به من کمک میکنن

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

فرض کنید میخواین روی دسکتاپ پوشه ای به اسم Linux درست کنید کافیه به شکل زیر عمل کنید

کد: گزینش همه
mkdir /home/$USER/Desktop/Linux


به همین سادگی فکر کنم انقدر واضح بود که نیاز به توضیح بیشتری نداشته باشه

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


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

اول دستور مربوطه رو معرفی کنیم :

با تایپ علامت ‍~ داخل ترمینال میبینید که خروجیش دقیقا میشه ‫مسير دايرکتوری خانگی‬ شما مثلا واسه من میشه home/mse/

فقط کافیه دستور بالا رو به صورت زیر تغییر بدید

کد: گزینش همه
mkdir ~/Desktop/Linux


اینجوری حتی اگه با sudo هم اجرا بشه دیگه مشکلی پیش نمیاد 8-) :)
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: کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » چهار شنبه اسفند 14, 87 6:14 am

خوب دستوراتی رو که narcissus جان گذاشته رو سعی میکنم هر کدوم رو با یه مثال عملی آموزش بدم فعلا بریسم سراغ اولین اسکریپتی که قراره بطور کامل بنویسیم

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

و اما دستورات و بعد هم اسکریپت :

پوشه ی archives از مسیر /var/cache/apt/

پوشه ی apt از مسیر /etc/

پوشه ی apt از مسیر /var/lib/

و فایل های pkgcache.bin و srcpkgcache.bin از مسیر /var/cache/apt/ باید کپی بشن روی دسکتاپ

خوب بریم سراغ اسکریپت

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

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

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

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

نوشتهاز moslem.b » چهار شنبه اسفند 14, 87 7:10 am

بعضی وقتا پیش میاد که پوشه ای رو که از طریق اسکریپت ساختین یا فایلی رو که به یه مسیر خاصی انتقال میدین مجوزهاش تغییر میکنه ( دلیلش رو نمیدونم اگه دوستان میدونن راهنمایی کنن ) برای تغییر مجوزها و دسترسی کامل میشه از طریق زیر عمل کرد

دستور مربوطه:

کد: گزینش همه
chmod 777 filename


مثلا من پوشه ی 12 رو به دسکتاپ انتقال دادم و میخوام دسترسی بهش آزاد باشه

کد: گزینش همه
chmod 777 ~/Desktop/12


این دستور دسترسی به پوشه ی 12 رو امکان پذیر میکنه ولی اگه میخواین مجوزهای تمام فایل ها و پوشه های توی یک دایرکتوری رو تغییر بدین از دستور chmod -R استفاده کنید

کد: گزینش همه
chmod -R 777 ~/Desktop/12


درباره ی مجوزها و تغییرشون توی لینک زیر مطالب جالبی نوشته شده

http://mymind.ir/wp/?tag=premisson
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: کلاس آموزش اسکریپت نویسی

نوشتهاز moslem.b » شنبه اسفند 17, 87 8:34 pm

moslem.b نوشته است:خوب دستوراتی رو که narcissus جان گذاشته رو سعی میکنم هر کدوم رو با یه مثال عملی آموزش بدم فعلا بریسم سراغ اولین اسکریپتی که قراره بطور کامل بنویسیم

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

و اما دستورات و بعد هم اسکریپت :

پوشه ی archives از مسیر /var/cache/apt/

پوشه ی apt از مسیر /etc/

پوشه ی apt از مسیر /var/lib/

و فایل های pkgcache.bin و srcpkgcache.bin از مسیر /var/cache/apt/ باید کپی بشن روی دسکتاپ

خوب بریم سراغ اسکریپت

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

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


خوب ظاهرا هیچ کس یه نگاه هم ننداخت مهم نیست اینم اسکریپتش

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


echo please choose 1 or 2
echo ----------------------
echo 1- Backup Package
echo
echo 2- Restore Package
echo ----------------------

read name

if [ $name = "1" ]
then
mkdir ~/Desktop/Backup
mkdir ~/Desktop/Backup/lib
mkdir ~/Desktop/Backup/etc
mkdir ~/Desktop/Backup/apt
cp -r /var/cache/apt/archives ~/Desktop/Backup
cp -r /etc/apt ~/Desktop/Backup/etc
cp -r /var/lib/apt ~/Desktop/Backup/lib
cp /var/cache/apt/pkgcache.bin ~/Desktop/Backup/apt
cp /var/cache/apt/srcpkgcache.bin ~/Desktop/Backup/apt
chmod -R 777 ~/Desktop/Backup

elif [ $name = "2" ]
then
cp -r ~/Desktop/Backup/archives /var/cache/apt
cp -r ~/Desktop/Backup/etc /etc/apt
cp -r ~/Desktop/Backup/lib /var/lib/apt
cp ~/Desktop/Backup/apt/pkgcache.bin /var/cache/apt
cp ~/Desktop/Backup/apt/srcpkgcache.bin /var/cache/apt
else
        echo "I dont know this number"
fi
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

پیشپس

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

اکنون هست

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