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

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

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

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

علی جان با این توضیحاتی که دادی من اینجور استنباط میکنم که اجرا کردن شل با . باعث میشه اسکریپت از بش اصلی استفاده کنه ولی با اجرای شل به شکل /. ما رسما یک عدد پروسه ی اضافی هم ایجاد میکنیم که باعث اشغال شدن منابع سیستمی بیشتری میشه درسته ؟


حقیقت قضیه اینجاست که با اجرای هر دستوری در شل یک نسخه از شل در حافظه مجددا بارگذاری می‌شه و دستور در اون شل اجرا می‌شه. دستور ps هم از این قاعده مستثنی نیست!


یعنی اگه اسکریپت شما همزمان 4 دستور رو بصورت مداوم اجرا کنه 4 عدد پروسه ی خشکل از بش استفاده میکنن :roll:

مشخص نکردن شا-بنگ در بحث قابل حمل بودن اسکریپت اثر می‌گذاره. یک اسکریپت بدون شا-بنگ در لینوکس با bash و در سیستم‌های یونیکسی دیگه با sh تفسیر می‌شه.


اگه شا-بنگ مشخص نکنیم و بش رو هم kill کنیم شل از کدوم مفسر استفاده میکنه ؟ :|
ctrl+c
moslem.b

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

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

نوشتهاز Ali_Gh » سه شنبه اسفند 10, 88 12:09 am

moslem.b نوشته است:علی جان با این توضیحاتی که دادی من اینجور استنباط میکنم که اجرا کردن شل با . باعث میشه اسکریپت از بش اصلی استفاده کنه ولی با اجرای شل به شکل /. ما رسما یک عدد پروسه ی اضافی هم ایجاد میکنیم که باعث اشغال شدن منابع سیستمی بیشتری میشه درسته ؟
....

یعنی اگه اسکریپت شما همزمان 4 دستور رو بصورت مداوم اجرا کنه 4 عدد پروسه ی خشکل از بش استفاده میکنن :roll:
...
اگه شا-بنگ مشخص نکنیم و بش رو هم kill کنیم شل از کدوم مفسر استفاده میکنه ؟ :|


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

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

راستی من یک چیزی پیدا کردم، البته این رو با الهام از داس فهمیدم. ظاهرا یک سری از دستورات هستند که اگه اجراشون کنین هیچ PID خاصی برای کشتنشون پیدا نمی‌کنین. البته من فقط این قضیه رو روی یکی از این دستورات امتحان کردم و این قضیه رو تعمیم دادم. خب منظورم کدوم دستوراته؟ منظورم دستوراتی هستش که در خروجی دستور help ظاهر می‌شن و به طور مشخص دستور read رو تست کردم. حدسم اینه که این دستورات دستورات داخلی bash هستند و برای متوقف کردن چنین پروسه‌هایی باید خود bash رو سر برید! اینجوری منطقی‌تر به نظر می‌یاد که برای اجرای هر اسکریپت/دستور(غیر داخلی) یک bash مجزا فراخوانی بشه و موقع متوقف کردن پروسه‌ی چنین دستوراتی یک bash اضافی بوجود بیاد!!

مسلم جان؟ خب تا وقتی shell نباشه که شل اسکریپتی نخواهد بود! اگه منظورت اجرای اسکریپت از محیط میز کار یا چیزی مثل این باشه هم خب بالاخره دو حالت برای اجرا داریم: یا اجرا یا اجرا در ترمینال. با زدن اجرا که اتفاقی نمی‌افته و می‌مونه اجرا در ترمینال که همون bash هستش. در مورد این قضیه همونطور که قبلا بررسی کردیم، فقط در صورتیکه مشکل پیش می‌یاد که شل پیش فرض bash نباشه.
برای بررسی اینکه شل پیش فرض شما چیه از این دستور کمک بگیرین:
کد: گزینش همه
grep ali-gh /etc/passwd

فقط کافی به جای ali-gh اسم کاربری خودتون رو بنویسین/
اگه کنجکاو هستین که چه شل‌های دیگه‌ای روی سیستمون نصب هستند از این دستور کمک بگیرین:
کد: گزینش همه
grep ali-gh /etc/passwd


خودتون می‌تونین حدس بزنین، جایگزین کردن شل پیش فرض چقدر آسون می‌تونه باشه. پس بهتره شابنگ رو رعایت کنیم،موافقین؟

اگه با شروع بخش جدید موافقین اعلام کنین ;)
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

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

نوشتهاز NabiKAZ » سه شنبه اسفند 11, 88 3:43 am

فکر کنم قرار بود اینجا آموزش شل اسکریپت باشه.
- بهتر نیست بجای مباحث محض و تئوریک و فلسفی، به مباحث کاربردی تر بپردازیم؟
- راستی فرق این تاپیک با تاپیک همسایه -کلاس آموزش اسکریپت نویسی- چیه؟!
- یه چیز دیگه؛ تاپیکی درمورد مرجع دستورات خط فرمان نداریم این اطراف؟!
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

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

نوشتهاز moslem.b » سه شنبه اسفند 11, 88 7:56 pm

اگه با شروع بخش جدید موافقین اعلام کنین ;)


بریم سراغ مبحث بعدی
ctrl+c
moslem.b

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

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

نوشتهاز Ali_Gh » سه شنبه اسفند 11, 88 10:21 pm

NabiKAZ نوشته است:فکر کنم قرار بود اینجا آموزش شل اسکریپت باشه.
- بهتر نیست بجای مباحث محض و تئوریک و فلسفی، به مباحث کاربردی تر بپردازیم؟
- راستی فرق این تاپیک با تاپیک همسایه -کلاس آموزش اسکریپت نویسی- چیه؟!
- یه چیز دیگه؛ تاپیکی درمورد مرجع دستورات خط فرمان نداریم این اطراف؟!

مرسی از یادآوری نبی جون؛ هر چند زیاد هم پرت نشده بودیم :roll:
فرقش اینه که اینجا با هم دیگه یاد می‌گیریم. یک چیزی من می‌گم یک چیزی شما یاد می‌دین
در ضمن قرار نیست که من بیام بگم از کدوم صفحه تا کدوم صفحه! هر وقت کسی دید می‌تونیم بریم بحث بعدی می‌تونه پیشنهاد بده تا کدوم صفحه ادامه بدیم/
در مورد تاپیک مرجع فرامین خط فرمان هم توی ویکی اوبونتو دات آی آر یکی هست. چون ویکیه جستجوش هم آسونه.
پیشنهاد من تا آخر صفحه ۴۶ هستش که بعد از اون redirect مطرح می‌شه.
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

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

نوشتهاز moslem.b » چهار شنبه اسفند 12, 88 10:32 pm

صفحه ی 41 قسمت More command on one command line

اون مثالی که گفته date;who دقیقا مثل این میمونه که بخوایم دو تا فرمان رو توی دو خط پشت سر هم بنویسیم یعنی اینجوری:

کد: گزینش همه
#!/bin/bash
date
who


علامت ( ; ) چه کاربرد دیگه ای توی شل داره‌؟
ctrl+c
moslem.b

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

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

نوشتهاز moslem.b » چهار شنبه اسفند 12, 88 10:51 pm

راستی این دو تا چه فرقی با هم دارن ؟

کد: گزینش همه
echo "version of your Kernel $(uname -r)"


کد: گزینش همه
echo "version of your Kernel `uname -r`"
ctrl+c
moslem.b

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

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

نوشتهاز Ali_Gh » آدینه اسفند 14, 88 6:46 pm

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

در صفحه ۳۹ به نکته‌ی جالبی برخوردم. اگه ترتیب الفبایی رو توی شرط لیست گیری جابه‌جا وارد کنیم، شرط باطل می‌شه و خروجی مثل حالتی می‌شه که انگار هیچ شرطی لحاظ نشده باشه.
مثلا شرط این دستور رو در نظر بگیرین:
کد: گزینش همه
ls [c-a]*


البته این قضیه برای حالت لحاظ نکردن کاراکتر درخروجی یکم فرق می‌کنه؛ مثلا با این دستور
کد: گزینش همه
ls [^c-^a]*

در خروجی قسمت اول باطل می‌شه و خروجی‌ای معادل این دستور رو نتیجه می‌ده
کد: گزینش همه
ls [^a]*


خب من مورد خاصی از این بخش به نظرم نمی‌رسه. اگه صحبتی نیست بریم جلو. موافقین؟
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

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

نوشتهاز moslem.b » شنبه اسفند 15, 88 9:53 pm

بریم سراغ قسمت بعدی فقط من متوجه نشدم این دسوراتی که جلوی شل مینویسیم چه کاربردی داره مثلا توی دستور روبرو ( myshell foo bar ) اون دوتا دستور که بجای foo bar نوشته میشن چه کاربردی دارن ؟
ctrl+c
moslem.b

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

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

نوشتهاز Ali_Gh » یک شنبه اسفند 16, 88 2:41 pm

moslem.b نوشته است:بریم سراغ قسمت بعدی فقط من متوجه نشدم این دسوراتی که جلوی شل مینویسیم چه کاربردی داره مثلا توی دستور روبرو ( myshell foo bar ) اون دوتا دستور که بجای foo bar نوشته میشن چه کاربردی دارن ؟


مسلم جان؛ اون‌ها دستورات دیگه‌ای نیستن. در واقع اون‌ها پارامتر‌هایی هستند که به شل فرستاده می‌شن.
بعضی دستورات/شل‌ها هیچ پارامتری نمی‌خوان. مثل
کد: گزینش همه
clear

بعضی‌ها هم یکی، دو تا یا بیشتر می‌خوان:
کد: گزینش همه
chmod 755 file

کد: گزینش همه
echo $SHELL


اون بخش مربوط به گرفتن مقدار این پارامتر‌هاست که از طرف کاربر به همراه اسم شل در ترمینال وارد می‌شن. مثلا با 1$ می‌فهمیم کاربر بعد از اسم شل اسکریپت چی وارد کرده. جزییاتش رو خودش بهتر گفته
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

پیشپس

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

اکنون هست

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

cron