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

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

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

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

نوشتهاز moslem.b » پنج شنبه فروردین 20, 88 7:22 am

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

کد: گزینش همه
&>/dev/null


مثال

کد: گزینش همه
echo salam &>/dev/null
ctrl+c
moslem.b

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

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

نوشتهاز NabiKAZ » چهار شنبه اردیبهشت 23, 88 6:32 am

با تشکر از آقا مسلم بابت مطالب بسیار مفیدش.

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

یک تجربه عملی به من نشون داد که باید مجوز اجرای فایل ما 777 باشه تا اجرا بشه در غیر این صورت خطای دسترسی میده.

ممنون
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

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

نوشتهاز peymanss » یک شنبه اردیبهشت 20, 94 8:41 pm

با سلام خدمت دوستان خوبم
ممنون از سایت بسیار خوب و مفیدتان
موفق،پیروز و سلامت باشید
www.gowebsite.ir
peymanss

 
نوشته: 6
پیوستن: یک شنبه اردیبهشت 20, 94 8:37 pm
Given: 0 thanks
Received: 0 thanks

پیشپس

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

اکنون هست

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

cron