انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: سید محمود رضا سجادی در 03 امرداد 1388، 12:27 ق‌ظ

عنوان: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 03 امرداد 1388، 12:27 ق‌ظ
سلام

من خیلی وقته که دنبال یه راهنمایی خوب برای برنامه نویسی در لینوکس میگردم

دوستان هم زحمت کشیدند و مخصوصا در جشن گذشته یه آموزش مختصری دادند اما به نظر من خیلی کم بود

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

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

حالا سوالم اینه
[/b]

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

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

در صورتی که جوابتون منفی باشه که فقط از متن باز ها استفاده میکنم و اگه مثبت باشه از همش

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

ممنون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 03 امرداد 1388، 07:20 ب‌ظ
سلام

با توجه به اینکه اساتید محترم پاسخی ندادند بنده جسارت می کنم و سکوت رو علامت رضا تلقی کرده و این مجموعه ترجمه رو با نام ویاد خداوند متعال آغاز میکنم

می دونم که خیلی شرع من مبتدی و تکراری هستش اما از اونجایی که قصد دارم این مجموعه کامل باشه لذا از زیر صفر شروع میکنم
دوستان کافیه که فقط بدونند یک چیزی به نام C وجود داره(اگه نشنیدید هم مهم نیست چون الان شنیدید دیگه  ;))

واما بعد

از تمام مفاهیم و ... میگذرم ومیرم سر اصل مطلب(پست بعد)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 03 امرداد 1388، 07:39 ب‌ظ
در لینوکس دو نوع برنامه وجود داره اگزکیوت ایبل و اسکریپت
اولی به صورت مستقیم در سیستم اجرا میشه اما اسکریپت ها برای اجرا نیاز به یک مترجم یا مفسر دارند و لذا از طریق یک برنامه دیگه اجرا میشن (نه به صورت مستقیم)

اولی نمونه فایل های .exe در ویندوز هست و اسکریپت ها مثل .bat , .cmd
همونجوری که تا حالا در ضمن کار با لینوکس تا حالا متوجه شدید بر خلاف ویندوز قایل های اجرایی در لینوکس احتیاج به نام خاص و یا پسوند خاصی ندارند
برای اجرای فایل ها و .. در لینوکس باید به سطح دسترسی های یوزر ها دقت کرد و اینکه فایل ها اجازه اجرا شدن رو دارند یا نه(بعدا در این باره صحبت می کنم)

اما در باره shell باید بگم که بعد از لاگین تو لینوکس شما با یه محیط متنی می تونید سر و کار داشته باشید که مثل کامند پرامپت در ویندوزه. این محیط میتونه از نوع های مختلفی باشه و معمولا bash هستش(مثل همینی که تو اوبونتو معمولا هست)
دقیقا مثل ویندوز وقتی شما یک دستور رو تایپ می کنید و یا قصد اجرای برنامه ای رو دارید این برنامه باید در آدرس از پیش تعیین شده ای باشه تا bash پیداش کنه
به عبارت دیگه bash فقط در آدرس های مشخصی به دنبال فایل و یا دستور شما میگرده و اگه در اونجاها پیدا نکنه command not found میده

این آدرس ها در PATH قرار داره(به کوچکی و بزرگی حروف دقت کنید)
می تونید این آدرس ها رو با تایپ دستور زیر مشاهده کنید:
echo $PATH
این آدرس ها معمولا شامل آدرس های استاندارد میشه که البته root میتونه اینارو کم یا زیاد کنه ولی معمولا همیشه شامل آدرس های زیر میشه
❑ /bin: Binaries, programs used in booting the system
❑ /usr/bin: User binaries, standard programs available to users
❑ /usr/local/bin: Local binaries, programs specific to an installation

دقت داشته باشید که لینوکس هم مثل یونیکس آدرس ها رو با ( : ) از هم جدا میکنه که البته همونطور که میدونید در ویندوز از ; استفاده میشد(نکته : لینوکس زود تر این علامت رو انتخاب کرده بود و لذا از ویندوزیا بپرسین که چرا عوض کردنش!!)
و البته همونجوری که میدونید در لین.کس آدرس ها با / از هم جدا میشن در صورتی که در ویندوز آدرس دهی با \ انجام میشه و باز هم لینوکس پیشتاز بوده و باید از ویندوزی ها دلیل این کارشون رو پرسید  ;)

برای امروز کافیه - فردا اولین برنامه رو مینویسیم (ایشالا)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: جادی در 04 امرداد 1388، 11:14 ق‌ظ
ممنون. فکر کنم اکثر دوستان با علاقه دنبال می کنن. با این تیپ ترجمه ای که کردی بدون شک هیچ مشکل قانونی وجود نداره (: ترجمه یک کتاب نیازمند مجوز از ناشر است (در اکثر موارد) اما این کاری که تو کردی، خوندن کتاب و نوشتن به زبون خودت است که خیلی هم عالیه و نیازی هم به مجوز از ناشر نداره. ادامه بده و می خونیم (: بعدا هم به ویکی اضافه کن.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 04 امرداد 1388، 03:39 ب‌ظ
سلام جادی جان
ممنون از اینکه پست دادی
ایشالا با راهنمایی ها و تصحیحات شما دوستان و اساتید محترم بیشتر دلگرم میشم و سرع تر پست میزنم

قصد داشتم پست بعدیم رو شب بزنم اما به مناسبت اینکه جادی جان زحمت کشیدند و منو دلگرم کردند همین الان یه پست مفصل می نویسم  \\:D/

(دوستان محترم - لطفا شما هم پست بزنید و این آموزش رو کامل تر کنید. ممنون :oops:)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 04 امرداد 1388، 04:39 ب‌ظ
برای برنامه نوییسی در shell دو نوع دستور داریم که بعدا در باره اونا با هم صحبت می کنیم اما یک سری علامت ها و .. داریم که همین الان قصد دارم چنتا از اونا رو بگم(که خیلی پر کاربردند)
بعدش اولین برنامه رو می نویسیم

منتقل کننده ها(redirection)
شما میتونید همونجوری که در c++ مقادیر رو از/به cin و cout دریافت/ارسال میکردید در اینجا هم عمل کنین
به عنوان مثال اگر خروجی یک دستور رو لازم دارید به راحتی میتونید اون رو داخل یک فایل بنویسید ویا اگه دستوری نیاز به آرگومان داره این آرگومان(ها) رو از یک فایل بهش بدین
(نکته مهم در اینجا اینه که همه چی تو لینوکس فایله و این براش یک نقطه قوته و خیلی خوبه-کار برنامه نویسا خیلی راحت شده- که البته بعدا در این باره بیشتر صحبت میکنیم)
برای این کارها(منتقل کردن) باید مثل c++ از عبارت کوچکتر و بزرگتر استفاده کرد یعنی به صورت یکی از ۴ شکل زیر
<
>
<<
>>

خوب معلومه که معانی اینها با هم فرق میکنن.
اونایی که دوتایی هستند یعنی >> یا << - کارشون اضافه کردن (append) هستش
به دستور زیر دقت کنین
ls *.deb >> mydebs.txtاین دستور نام هرچی فایل دبین در پوشه جاری باشه رو داخل یک فایل در فلدر جاری به نام mydebs.txt اضافه میکنه
اگه این فایل وجود نداشته باشه که ساخته میشه و در غیر این صورت به انتهای فایل مقادیر جدید اضافه میشه

حالا به دستور زیر دقت کنید

ls *.deb > mydebs.txtاگه فایل موجود نباشه که ساخته میشه اما در غیر این صورت فایل قبلی با مقادیر جدید جایگزین میشه
به عبارت دیگه اطلاعات قدیمی از دیست میره و با مقادیر جدید جایگزین میشه

اگر جهت این فلش ها(بزرگ و کوچک) جابجا بشه و از >> یا > استفاده کنیم . این علامت ها به معنی ورودی برای دستور خواهند بود

لوله ها(pipes)
برخلاف ویندوز در لینوکس و یونیکس دست شما بازه که خروجی یک دستور رو به عنوان ورودی استفاده کنین و یا به عبارت دیگه کانال کشی کنین و خروجی ها درون دستور بعدی ریخته بشه
نکته جالب اینه که این کانال کشی واقعی هستش و نه مجازی(به زودی منظور من رو شرح میدم)
به دستور زیر دقت کنید
ps > psout.txt
sort psout.txt > pssort.out
در عبارت فوق ابتدا خروجی دستور ps رو در یک فایل ذخیره میکنیم و بعد خروجی رو با دستور sort منظم میکنیم و در یک فایل دیگه ذخیره میکنیم

به جای عبارت فوق با لوله کشی به عبارت زیر میرسیم (علامت لوله کشی | هستش)
ps | sort > pssort.outهمونطوری که دیده میشه فایل میانی که اضافه هم بود حذف شد و سرعت عملیلت هم بیشتر شد در صورتی که اگه این لوله کشی مجازی بود در واقه قسمتی از حافظه به عنوان temp قرار می گرفت و خروجی ابتدا در اون ذخیره میشد و سپس sort میشد در صورتی که در عبارت لوله کشی این فرایند به صورت موازی انجام میشه

یک شاهد دیگه برای موازی انجام شدن این فرایند دستور زیره
cat mydata.txt | sort | uniq | > mydata.txtاگه این فرایند مجازی بود نباید مشکلی پیش میومد اما در دستور فوق به علت موازی بودن فرایند شما فقط یه فایل خالی گیرتون میاد.
دلیل این حرف و اتفاق هم اینه که فایل mydata.txt قبل از اینکه خونده بشه با دستور < داره جایگزین میشه(با یه فایل خالی) و لذا با نوشتن دستور فوق همیشه یک فایل خالی تحویل میگیرین


اولین برنامه

for file in *
do
if grep -l POSIX $file
then
more $file
fi
done

بعدا در باره حلقه ها و شرط یا هم صحبت میکنیم
فعلا دقت کنید که با تایپ دستورات به صورت خط به خط در ترمینال به چه سادگی از خط فرمان عادی ($) - شکل خط فرمان به صورت < دراومد و آماده گرفتن برنامه شد!!
نکته دیگه اینکه اگه خاستید یک سری عبارات یا دستور های مشابه رو بررسی کنسد - برای سادگی کار شما راه هایی وجود داره

ls my_{finger,toe}sعبارت فوق فایل های my_fingers و my_toes رو نشون میده(در دایرکتوری جاری)

اولین اسکریپت

حالا احتیاج به یک ادیتور متن داریم(شما میتونید از هرچیزی استفاده کنید اما من یکی از برنامه های زیر رو پیشنهاد میکنم)
gedit
kate
vim
nano
emacs

یکی از دوستام ادعا میکنه که emacs از همه قویتره اما خودم با gedit راحت ترم
استفاده از vi یا vim هم خیلی با کلاسه  ;)

یک فایل به نام first ایجاد کنید(توجه کنید که اگه بعدا هم یک اسکریپت نوشتید نامش با دستور ها یکی نباشه و به عنوان مثال از test استفاده نکنید چون این یک دستوره)
داخلش عبارت زیر رو بنویسید

#!/bin/sh
# fist
# this is my first script and it is from forum.ubuntu.ir

for file in *
do
if grep -q  POSIX $file
then
echo $file
fi
done

exit 0

کامنت ها در اسکریپت با # شروع میشن (همونجوری که در بعضی زبون ها با علامت های دیگه ای مثل // یا --!> شروع میشن)
اما خط اول یکم متفاوته
اگه بعد از # بافاصله ! بیاد یعنی عبارت #! مشاهده بشه به این معنیه که بعدش روش اجرای فایل قرار داره
اگه یادتون یاشه گفم که اسکریپت ها هرگر مستقیم اجرا نمیشن و از طریق یک برنامه دیگه اجرا میشن پس میتونیم روش اجرای اون رو در خط اول بزاریم و یا اینکه در هنگام استفاده دستی وارید کنیم

برای اجرای این اسکریپت شما باید اول اجازه اجرا شدن رو بهش بدین
chmod +x firstویا اینکه بنویسید
/bin/sh firstواگر با chmod مجوز اجرا را بهش داده باشین با دستور زیر اجراش کنین
firstاگه با ویغامی مبنی بر اینکه دستور پیدا نشد مواجه شدید معنیش اینکه آدرس محل فایل در PATH وجود نداره پس شما چنتا راه دارین
۱- این فایل رو در یک آدرس معتبر کپی کنین
۲-دستور رو به شکل زیر اجرا کنین
./firstکه به این معنیع که این فایل در آدرس جاری قرار داره
۳- دایرکتوری جاری رو به PATH اضافه کنین یعنی
PATH=$PATH:.به اون نقطه آخر دقت کنین که به معنیه فولدر جاری هستش
۴-ویا اینکه با همون روش بند ۳ آدرس مطلق فلدر جاری رو به PATH اضافه کنین تا از هر جایی بتونین اسکریپت رو اجرا کنین

نکته : تغییر دادن PATH به شکل فوق برای سوپر یوزر ویا همون root کار خیلی خطرناکته چون یک شکاف امنیتی محسوب میشه چون با اجرای یک دستور توسط root ممکنه که یک برنامه اشتباه و دروغین اجرا بشه!!!(حالا پس با کپی کردن یک اسکریپت با نام یکی از دستورات مشهور و پر استفاده شما میتونید هر کار ی رو در سیستم قربانی انجام بدین :-X چون با دسترسی root قراره اجرا بشه)

نکته : استفاده از chroot  و همچنین تغییر دسترسی و یا دادن مجوز ها راه های خیلی زیادی داره که فعلا یکیش رو بررسی کردیم-پیشنهاد میکنم دستور man chmod رو برای اطلاعات بیشتر اجرا کنین

خوش و خرم باشین
یا علی

فردا وارد بحث شیرین متغیر ها میشم و متغیر های اصلی و محلی سیستمتون رو معرفی میکنم و با هم چنتا برنامه کوچولو مینویسیم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: heresh در 29 امرداد 1388، 08:47 ب‌ظ
دوست عزیز چرا ادامه ندادی. خوب شروع کردی، این آموزش می‌تونه به خیلی ها کمک کنه.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 29 امرداد 1388، 09:36 ب‌ظ
سلام
قصد ادامه دادنش رو داشتم اما هم view این پست کم بود هم کسی کامنت نمیداد و من دیدم استقبال نمیشه و لذا بی خیال شدم
اگه فکر میکنید لازمه ادامه میدم
برای خودم شروع به تایپ کرده بودم و این سر فصل ها رو انتخاب کرده بودم
برنامه نویسی در شل (بخشیش رو در پست های قبلی دیدید)
کار با فایل ها
محیط لینوکس
ترمینال ها
برنامه نویسی گرافیکی در محیط متنی
مدیریت داده ها(قفل کردن فایل ها - دیتابیس ها و غیره)
mysql
ابزار توسعه (development tools) که شامل کنترل سورس ها  و ساخت پکیج های RPM و DEB میشه و همینطور KDevelop - C-Forgr - xwpe و ...
دیباگینگ
پروسه ها و سیگنال ها (مدیریت رویداد ها در همین بخش میاد)
یک مقدمه کوتاه در باره Thread ها
بحث جامع تری در باره لوله ها (pipe) و پروسه های داخلی
و البته قصد دارم بازم بهش اضافه کنم (برنامه نویسی پرت ها و سوکت ها و پروتوکل ها)
و در نهایت هم GTK+ و Qt برای گنوم و کا دی ای
برنامه نویسی درایور ها در لینوکس و استاندارد های لینوکس


نظرتون رو بگید تا ادامه بدم یا ندم!
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: moslem.b در 30 امرداد 1388، 12:31 ق‌ظ
ایول عالیه,ادامه بده سید جون ما پشتتیم (http://www.pic4ever.com/images/6.gif)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: moslem.b در 30 امرداد 1388، 12:38 ق‌ظ
نقل‌قول
اگه یادتون یاشه گفم که اسکریپت ها هرگر مستقیم اجرا نمیشن و از طریق یک برنامه دیگه اجرا میشن پس میتونیم روش اجرای اون رو در خط اول بزاریم و یا اینکه در هنگام استفاده دستی وارید کنیم

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


یه سوال این chmod +x چه سطح اجرایی به فایلمون میده ؟ چرا مثلا" از chmod 775 یا chmod 777 اتفاده نمیکنیم ؟
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: Freeman در 30 امرداد 1388، 01:21 ق‌ظ
سید اگه بشه بر اساس همین سر فصل جلو بری یکی بهترین منابع فارسی برای برنامه نویسی تو لینوکس میشه

حتما ادامه بده فوق العاده میشه  :)

موفق باشی  ;)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 30 امرداد 1388، 07:13 ق‌ظ
یه سوال این chmod +x چه سطح اجرایی به فایلمون میده ؟ چرا مثلا" از chmod 775 یا chmod 777 اتفاده نمیکنیم ؟
بهتره منوال chmod رو بخونید. در کل، با دستور chmod به دو روش می‌تونیم مجوزهای دسترسی فایل رو تغییر بدیم:

یکی بصورت مطلق: اینکه پرمیشن خوندن(r) و نوشتن(w) و اجرا کردن(x) رو برای کاربر(u) و گروه(g) و دیگران(o) همه رو یکدفعه براش تعیین کنیم، مثلاً با یه عدد سه رقمی در مبنای 8 مثل همون 777 که یعنی مجوز کامل برای همه! یا مثلاً 755 یعنی مجوز کامل(1+2+4=7) برای کاربر(صاحب فایل) و فقط مجوز خوندن و اجرا کردن(1+4=5) برای گروه و دیگران(بدون مجوز نوشتن)

یکی هم به روش نسبی. مثلاً می‌خواید مجوز اجرا کردن رو به همه بدید. اما مجوز خوندن و نوشتن رو تغییر ندید و هر چی قبلاً بوده بمونه. این کار با a+x یعنی all + execute انجام میشه. (یا مثلاً u+x تا مجوز اجرا کردن رو به کاربر یا همون صاحب فایل بده) دیگه بقیهٔ مجوزها رو تغییر نمیده.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 30 امرداد 1388، 11:15 ق‌ظ
با تشکر از تمامی دوستان به بحثمون ادامه میدیم فقط اگه ممکنه اساتید بیشتر به اینجا سر بزنند و راهنماییمون کنند.ilius جان بازم به ما سر بزن (نکنه این پستی که اینجا دادی آخریش باشه) حسن جان شما هم بازم بیا اینورا - درسته که شما استادید و این بحث ها رو میدونید اما اگر سر نزنید پس کی اشکالای منو بگیره؟؟

برنامه نویسی و متغیر ها

برخلاف زبا نهایی مثل C معمولا در برنامه نویسی اسکریپت ها متغیر ها قبل از استفاده تعریف نمیشن و به عبارت دیگه در همون لحظه که داریم ازشون استفاده میکنیم در واقع داریم به سادگی اونها رو میسازیم
به صورت دیفالت تمامی متغیر ها مقادیر استرینگ و متنی رو در خودشون نگه میدارند حتی اگر به اونها مقادیر عددی رو داده باشیم
شل و برخی یوتیلیتی ها مقادیر عددی به شکل استرینگ رو تبدیل میکنند تا انجام محاسبات روی آنها ممکن بشه
نکته دیگه ای که یاداوری اون خیلی مهمه اینه که متغیر هایی مثل name و Name با هم متفاوتند و دلیل اون حساسیت لینوکس به کوچیک و بزرگ بودن حروف هستش و لذا هر دو این متغیر ها با متغیر NAME متفاوت هستند
برای دسترسی به مقدار یک متغیر در شل باید علامت $ رو در اول اسم اون متغیر قرار بدید مثلا
$HOMEاما زمان مقدار دهی فقط از نام اون متغیر استفاده می کنیم
به دستور های زیر که در شل تایپ میشن دقت کنید
salutation=Hello
echo $salutation
خروجی این دستورات همونجوری که انتظار میره Hello هستش
حالا :
salutation="Yes Dear"
echo $salutation
که بازهم عبارت Yes Dear نمایش داده خواهد شد(به نظر شما چرا در ذستور اول استفاده از علامت " اختیاری بود اما در دومی اجباریه؟)
salutation=7+5
echo $salutation
خروجی این دستور برای ما خیلی مهمه چون درک مارو از متغیر های استرینگ و تعریف متغیر ها در شل درست میکنه!!!
خروجی این دستور دقیقا عبارت
7+5هستش و نه هیچ  چیز دیگه ای (یعنی عمل جمع انجام نمیشه)
در آخر توجه شما رو به دونکه اصلی جلب میکنم
اول اینکه همونجوری که متوجه شدید مقادیر روبروی اسم متغیرها در مقدار دهی نمیتونن دارای فاصله (اسپیس) باشن و اگر که اسپیس در اونها وجود داره حتما باید از علامت نقل قول " در دو طرف اونها استفاده بشه (مانند مثال دوم)
نکته دیگه اینکه در دوطرف علامت مساوی (=) در هنگام مقدار دهی نباید هیچگونه فاصله ای وجود داشته باشه

خوب حالا قبل از شروع به برنامه نویسی با متغیر ها نیاز به یک دستور اساسی دیگه هم داریم و اون چیزی نیست جز read
شما باید قادر باشید تا از یوزر مقادیری رو در حین اجرای برنامه دریافت کنید(بعدا در باره آرگومان های ورودی صحبت خواهیم کرد اما فعلا مقادیر در حین اجرا مد نظر منه)
به سادگی شما میتونید دستور زیر رو در اسکریپتتون ویا مستقیما در شل تایپ کنید تا همه چی متوقف بشه و برنامه صبر کنه تا کاربر یک عبارت رو وارد کنه
به صورت دیفالت نیازی به استفاده از " در اینجور دستور ها نیست
read salutationو بر فرض اینکه کاربر مقداری مانند Wie geht's رو با تمام فاصله ها تایپ بکنه خروجی دستور زیر
echo $salutaionمقدار Wie geht's خواهد بود
برای اینکه مشکلی پیش نیاد یه بار دیگه توجه شما رو به فاصله ها (space - tab - enter) جلب میکنم. دقت کنید که اگه یکی از اینها و یا بیشتر در مقدار مقابل متغیر وجود داشته باشه استفاده از " اجباریه

در باره برنامه :
چنانچه در کد زیر خواهید دید علامات نقل قول تکی (') , دوتایی(") اعمال مختلفی انجام میدن
اگر عبارتی مانند $foo رو داخل نقل قول تکی یا دوتایی بگذاریم نتایج مختلفی میده و نقل قول تکب از جایگزینی مقدار متغیر به جای اسم اون جلوگیری میکنه
از طرف دیگه عبارتی مثل echo foo رو در نظر بگیرید. به دلیل اینکه در اول نام متغیر از علامت $ استفاده نشده با اون به صورت یک رشته برخورد میشه و عین اون تایپ میشه
مانند همون علامت \ که در C باهاش برخورد کردید اگر قصد چاپ علامت $ به عنوان یک کاراکتر رو داشته باشید باید در اول اون \ قرار بدید یعنی echo \$foo یک متغیر نیست بلکه ترکیبی از یک کاراکتر ($) و یک رشته (foo) هستش

حالا اسکریپت زیر رو در جایی بنویسید و سیو و اجرا کنید (بعد از اینکه مجوز اجرا رو بهش دادید و یا اینکه مستقیم اجراش کنید)
#!/bin/sh
myvar="Hi there"
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar

echo Enter Some Text
read myvar

echo '$myvar' now equals $myvar
exit 0

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

متغیر های محلی
$HOME
$PATH
$PS1  [\u@ \h \W]
$PS2
$IFS
$0
$#
$$

متغیر های پارامتری
$1 $2 $3 ....
$*
$@

اگر به کسب اطلاعات در زمینه چگونگی اجرای برنامه ها در محیط های مختلف علاقه دارید دستور env <command> رو اجرا کنید  و در باره env مطالعه کنید
در پست آیانده به توضیح متغیر های محلی و پارامتری میپردازم و در پست های آینده در باره export و مقدار دهی متغیرر ها در subshell ها با هم صحبت میکنیم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: mimook در 30 امرداد 1388، 11:11 ب‌ظ
عالیه ;)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: arastoo.s در 31 امرداد 1388، 06:05 ق‌ظ
سلام دوست عزیز
اقا ما الان پست شما رو دیدیم اما وقت نکردم کامل بخونم
هر کمکی در رابطه با C بود تا جای توان در خدمتیم
راستی چرا pdf نمیکنی بدی بیرون
کارت حرف نداره رفیق  =D> :p
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 31 امرداد 1388، 08:41 ق‌ظ
اول از آقای سجادی تشکر می‌کنم

اما نکتهٔ دیگه‌ای که می‌تونم اضافه کنم اینکه سینگل‌کوت یا دبل‌کوت در دستور echo هم ممکنه تاثیر بذاره، به شرطی که دو تا (یا بیشتر) علامت فاصله پشت سر هم قرار بگیرن.
مثلاً توی این مثالی که آقای سجادی نوشتن:
myvar="Hi there"
echo $myvar
echo "$myvar"
خروجی دو تا echo با هم فرقی نداره، چون در حالت اول، دو کلمهٔ Hi و there بعنوان دو تا آرگومان دستور echo محسوب میشن و دستور echo هم تمام آرگومان‌هاش رو با یه فاصله بین‌شون چاپ میکنه. در حالت دوم فقط یه آرگومان به دستور echo داده میشه که حاوی کل رشتهٔ Hi there هست. البته در اینجا تفاوتی در خروجی وجود نداره، چون بین دو کلمه فقط یه فاصله وجود داره. اما این چطور:
myvar="Hi      there"
echo $myvar
echo "$myvar"
طبق توضیحاتی که دادم میشه پیش‌بینی کرد که echo اولی بیط یه فاصله بین دو کلمه چاپ میکنه(چون بین دو تا آرگومان، هر چند تا فاصله هم بذارید فرقی نمیکنه) اما echo دومی چند تا فاصله بین دو کلمه چاپ میکنه(در واقع عین رشتهٔ myvar$ رو چاپ میکنه.

نکتهٔ دیگه اینکه، کاراکترهای خاص در شل، یه اولویتی نسبت به هم دارن. مثلاً اولویت بک‌اسلش از سینگل‌کوت و دبل‌کوت بیشتره. یعنی توی یه رشتهٔ محصور به دبل‌کوت ی حتی سینگل‌کوت، بازم بک‌اسلش کاراکتر خاص محسوب میشه. اما توی یه رشتهٔ محصور به سینگل‌کوت، دیگه کارکاکتر دالرساین($) کارکاکتر خاص نیست(به همین دلیل مقادیر متغیرها رو جایگزین نمیکنه) پس اولیوت دالرسان از سینگل‌کوت کمتره. در واقع بک‌اسلش اولیوت اول رو داره. بعدش سینگل‌کوت هست. بعدش کارکاکترهای دیگه‌ای مثل دالرساین و براکت‌ها و کروشه‌ها []{} و غیره هستن. و تقریباً آخر از همه دبل‌کوت هست(البته اینو مطمئن نیستم). در واقع وجود دبل‌کوت فقط کاراکتر فاصله رو خنثی می‌کنه(یعنی از یه کارکاکتر خاص تبدیل به یه کاراکتر معمولی در یک رشته میکنه، یعنی کاراکتری با کد 32 و نه چیز دیگه). البته از اونجایی که بک‌اسلش بیشترین اولیوت رو داره، این کارو با بک‌اسلش هم میشه انجام داد. مثلاً شما میخواید یه فایلی که داخل اسمش فاصله هست رو توی خط فرمان استفاده کنید(مثلاً به دستور ls یا chmod یا غیره بدید). چند تا کار می‌تونید انجام بدید:

یکی اینکه اسم فایل رو داخل سینگل‌کوت بذارید. اینطور خیالتون تقریباً راحت هست، فقط نباید کاراکتر سینکل‌کوت داخل اسمش باشه، اگه بود قبل سینگل‌کوت، یه بک‌اسلش بذارید. مثلاً:
touch 'my file'
touch 'ilius\'s file'
اما این دستور اشکال داره:
touch 'ilius's file'در واقع با زدن اینتر، شل منتظر می‌مونه(با چاپ یه کاراکتر < منتظره تا بلوک تموم بشه) چون شما یه سینگل‌کوت باز کردید(آخرین کاراکتر دستور) که هنوز نبستید!


(می‌دونید چرا دستور touch رو انتخاب کردم؟ چون اگه چند تا آرگومان بهش بدید، چند تا فایل میسازه. البته در صورت عدم وجود. اما اگه یه أرگومان بدید، یه فایل میسازه. مثل echo نیست که در بعضی موارد بی‌تفاوت باشه)


اما راه دوم اینکه اسم فایل رو داخل دبل‌کوت بذارید، اما این‌بار باید حواستون به کارکاکترهای $ و {}[] و غیره هم باشه(پس همون سینگل‌کوت بهتره)

راه سوم اینکه اسم فایل رو نه داخل سینگل‌کوت بذارید نه دبل‌کوت! عوضش در جاهایی که لازم هست از کاراکتر بک‌اسلش استفاده کنید:
touch my\ file
touch kill\ micro\$oft\'s\ office
به تک‌تک کاراکترها(مخصوصاً $ و \ و ' و فاصله) دقت کنید. حالا خودتون می‌تونید بک‌اسلش‌ها رو دونه‌دونه حذف کنید و نتیجه رو ببینید(اسم فایل‌هایی که میسازه) تا متوجه تاثیر بک‌اسلش بشید.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 31 امرداد 1388، 01:37 ب‌ظ
با تشکر از arastoo.s عزیز - آره کمک لازم دارم اما میدونی چرا pdf نکردم؟
چون قصد ادرم خودمم یاد بگیرم (نه اینکه فقط یاد بدم) چون خودمم مبتدیم

به عنوان مثال باید از دوسا عزیزمون ilius جان تشکر کنم که منو شرمنده کردند
منظور من از پست زدن همینه که دوستان سر بزنند و اشکالات منو بگیرند تا ۱-من یه چیزی یاد بگیرم و شاید بعضی دوستان هم به نکانت جدیدی دست پیدا کنند ۲-یه مجموعه کامل آموزشی درست شه

دوست عزیز ilius جان - شما تاج سر مایی همون محمود بگی کافیه
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 31 امرداد 1388، 01:58 ب‌ظ
این همون قولیه که در باره متغیر های محلی و پترامتری داده بودم
که چون ترجمش در بعضی جاها خیلی سخت و یا غیر ممکن بود اصل متن رو براتون گذاشتم و اگه براتون نا مفهوم میاد فکر کنم با مثالایی که بعدش میزنم بحث روشن بشه
Environment Variable | Description
_____________________________________________________________________________________________
$HOME | The home directory of the current user.
$PATH | A colon-separated list of directories to search for commands.
$PS1 | A command prompt, frequently $, but in bash you can use some
more complex values; for example, the string [\u@\h \W]$ is a
popular default that tells you the user, machine name, and current
directory, as well as giving a $ prompt.
$PS2 | A secondary prompt, used when prompting for additional input;
usually >.
$IFS | An input field separator; a list of characters that are used to sepa-
rate words when the shell is reading input, usually space, tab, and
newline characters.
$0 | The name of the shell script.
$# | The number of parameters passed.
$$ | The process ID of the shell script, often used inside a script for
generating unique temporary filenames; for example /tmp/tmp-
file_$$.

Parameter Variable | Description
__________________________________________________________________________________________________________
$1, $2, ... | The parameters given to the script.
$* | A list of all the parameters, in a single variable, separated by the first
| character in the environment variable IFS.
$@ | A subtle variation on $*; it doesn’t use the IFS environment variable,
| so parameters may be run together if IFS is empty.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 31 امرداد 1388، 04:17 ب‌ظ
خب باز نکته‌ای که به ذهنم رسید دربارهٔ کاربرد متغیر محیطی IFS در حلقهٔ for
این چند خط رو اجرا کنید:
for DIR in $PATH ; do
  echo $DIR
done
حالا یه بار دیگه، اما این دفعه اولش مقدار IFS رو برابر دونقطه می‌ذاریم:

IFS=:
for DIR in $PATH ; do
  echo $DIR
done
تفاوت رو دیدید؟ علتش اینه که توی متغیر محیطی PATH$ مسیر دایرکتوری‌ها با کاراکتر : از هم جدا شده. و مقدار متغیر محیطی IFS بطور پیش‌فرض یه فاصله هست، پس در حالت اول توی حلقهٔ for اون رشته رو فرض میکنه که قسمتهای مختلفش(که توی حلقه استفاده میشه) با یه فاصله از هم جدا شدن. ولی احتمالاً توی مقدار متغیر PATH اصلاً کاراکتر فاصله وجود نداره(مسیر دایرکتوری‌ها با : جدا شده و خود مسیر دایرکتوری‌ها هم احتمالا فاصله نداره) پس در حالت اول حلقه یک‌بار اجرا میشه و کل متغیر PATH رو یکدفعه چاپ میکنه.

اما در حالت دوم(که اولش IFS رو برابر دونقطه میذاریم) رشتهٔ اون متغیر PATH رو با کارکاکتر دونقطه جدا می‌کنه و هر بار داخل متغیر DIR قرار میده و حلقه اجرا میشه. نتیجه اینکه تمام دایرکتوری‌ها متغیر PATH هر کدوم توی یه خط چاپ میشن.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: OpenS در 31 امرداد 1388، 04:22 ب‌ظ
سلام دوستان

ممنون کارتون عالیه ادامه بدین ;)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: Freeman در 31 امرداد 1388، 09:25 ب‌ظ
باز هم تشکر از دوستان و خسته نباشید

پیشنهاد میکنم تاپیک مهم بشه

موفق باشید
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 01 شهریور 1388، 01:12 ق‌ظ
خوب دوستان
همونجوری که دیدید ilius جان بحث جالبی رو مطرح کردند که خیلی جالب بود (واقعا لذت بردم)
در ادامه بحث (و منتظر ماندن برای نکته های جالب تر از طرف ایشون و سایر دوستان) بحث رو به سمت یک مثال از متغیر های پارامتری هدایت میکنم

این متغیر ها - متغیرهایی هستند که به عنوان آرگومان به فایل یا بهتر بگم اسکریپت شما داده میشن
لذا برای تست کردن این متغیر ها و امتحان اونها حتما باید اسکریپت بنویسید و نمیشه اونها رو در خود شل مستقیما تایپ کرد(البته بسته به مثال هم هست ;)) اولین مثال برای تفاوت $@ و $* هستش که در همون ترمینال تایپ کنید و دومی یک اسکریپت

IFS=''
set foo bat bam
echo "$@"

echo "$*"
حالا مقدار IFS رو از بین میبریم و دوباره تست میکنیم
unset IFS
echo "$*"

در اینجا باید با توجه به فرمایشات ilius جان به نقش نقل قول دوتایی و تفاوت بین $* و $@ توجه کنید

حالا برای مثال دوم اسکریپت زیر رو بسازید
#!/bin/sh
salutation="Hello"
echo $salutation
echo "the program $0 is now running"
echo "The second parameter is $2"
echo "The first parameter is $1"
echo "The parameter list is $*"
echo "The user's home directory is $HOME"

echo "Please enter the new greeting"
read salutation

echo $salutation
echo "The script is now complited"
exit 0

حالا فرض کنید که این اسکریپت رو شما با یک اسمی در یک داریکتوری سیو کردید
با فرض اینکه نام فایل شما myfile باشه و هم اکنون با محیط متنی (ترمینال) با دایرکتوری مورد نظر cd کرده باشید دستور زیر رو اجرا کنید
./myfile foo bar bazبه خروجی دقت کنید!!!!
اگر نام فایل شما تغییر کنه کجای خروجی تغییر میکنه؟
شما میتونید نام فایل اسکریپت رو در یک متغیر داشته باشید.نام اون متغیر چیه؟
در حین اجرا از شما یک مقدار گرفته میشه(read) فقط قصد من این بود که مطالب پست های قبلی رو تکرار کنیم تا یادمون نره (استفاده از متغیر ها و مفهوم اون)

حالا یک سر فصل جدید رو آغاز میکنیم
دستو test یا ]

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

ممکنه استفاده از کاراکتر ] کمی عجیب و نا مانوس باشه اما در داخل کد باعث خوانایی بیشتر کد میشه!!!!

دستور زیر رو لطفا در ترمینال و با دسترسی رووت اجرا کنید
ls -l /usr/bin/[
نکته ای که در اینجا مهمه اینه که همونجوری که متوجه شدید test یک دستوره
بعضی از دوستان که تازه شروع به اسکریپت نویسی کردند به اشتباه اسم اسکریپت خودشون رو test میذارند و مستقیقا در ترمینال تلیپ میکنند test که اجرا بشه
اما در اینجا مشکلی پیش میاد براشون که نمیدونن کدوم test داره اجرا میشه
اگر در $PATH شما مقدار نقطه (. = دات) رو داشته باشد بهتر متوجه این مشکل میشید و در غیر این صورت حتما اونی اجرا میشه که مد نظر شما نیشت
برای اطمینان از اجرای صحیح فایل مورد نظر در این مورد باید عبارت زی رو تایپ کنید (با آدرس مطلق یا نسبی)
./test
به عنوان ادامه بحث فرض بر این است که وجود یا عدم وجود یک فایل خاص برای اسکریپت شما خیلی مهمه و قصد دارید که وجود این فایل رو چک کنید
باید از دستور test استفاده کنید
test -f <filename>
if test -f fred.c
then
....
fi

این کد با کد زیر برابره

if [ -f fred.c ]
then
....
fi

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

نکته دیگه اینکه اگر دوست دارید که then رو در همون خطی که if قرار داره تایپ بکنید باید با یک ; به سیستم بفهمونید که then جدای از test هستش
if [ -f fred.c ] ; then
....
fi
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: sahama در 02 شهریور 1388، 03:34 ب‌ظ
باز هم تشکر از دوستان و خسته نباشید

پیشنهاد میکنم تاپیک مهم بشه

موفق باشید
موافقم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: lomion در 02 شهریور 1388، 03:39 ب‌ظ
‫۱) جالبه که این تاپیک خوب از دستم در رفته  :o خدا قوت، دوستان. غنی کردن جامعه اوبونتو یه کار خیلی خوب و مثبت در دنیای گنو هست. بهترین روش یاد گرفتن یاددادنه :)

‫۲) با اینکه مدتی گذشته ولی دیر نشده. تاپیک چسبناک شد. امیدوارم به دل دوستان بچسبه :)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 02 شهریور 1388، 07:43 ب‌ظ
سلام
تا حالا خیلی چیزا در باره ایکریپت نویسی یاد گرفتیم واز دستور if هم زیاد استفاده کردیم
فکر کنم وقتشه یکم درباره انواع و اقیام مقایسه های منطقی با هم حرف بزنیم

String Comparison | Result
____________________________________________________________________________
string1 = string2 | True if the strings are equal.
string1 != string2 | True if the strings are not equal.
-n string | True if the string is not null.
-z string | True if the string is null (an empty string).

Arithmetic Comparison | Result
_______________________________________________________________________________________
expression1 -eq expression2 | True if the expressions are equal.
expression1 -ne expression2 | True if the expressions are not equal.
expression1 -gt expression2 | True if expression1 is greater than expression2.
expression1 -ge expression2 | True if expression1 is greater than or equal to
| expression2.
expression1 -lt expression2 | True if expression1 is less than expression2.
expression1 -le expression2 | True if expression1 is less than or equal to
| expression2.
! expression | True if the expression is false, and vice versa.

File Conditional | Result
_______________________________________________________________________________________________
-d file | True if the file is a directory.
-e file | True if the file exists. Note that, historically, the -e option has not
| been portable, so -f is usually used.
-f file | True if the file is a regular file.
-g file | True if set-group-id is set on file.
-r file | True if the file is readable.
-s file | True if the file has nonzero size.
-u file | True if set-user-id is set on file.
-w file | True if the file is writable.
-x file | True if the file is executable.

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

حالا یک خاصه در باره if
همونجوری که میدونستید و یا تاحالا از اسکریپت ها حدس زدید if خیلی ساده است و یک تصمیم گیری ساده رو انجام میده
عبارتی رو که بهش بدیم چک میکنه و اگر دستور یا عبارتی که بهش دادیم درست باشه یک کار یا کارهای خاص رو انجام میده و میشه به صورت اختیاری تنظیم کرد که اگر غلط بود هم کارهایی رو انجام بده (یعنی else اختیاریه)
شکل کلی اون اینشکلیه
if condition
then
   statements(TRUE)
else
   statements(FALSE)
fi

حالا یک اسکریپت

#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday

if [ $timeofday = "yes" ]; then
   echo "Good morning"
else
   echo "Good afternoon"
fi

exit 0

حالا یک دستور جدید elif که در واقع همون else if ویا در بعضی زبون های برنامه نویسی elseif هستش

در کد فوق اگر کاربر هر عبارتی غیر از yes با حروف کوچک رو تایپ کنه حتی YES به عنوان no در نظر گرفته میشه که صحیح نیست
پس کد رو در قدم اول به شکل زیر در میارم


#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday

if [ $timeofday = "yes" ]; then
   echo "Good morning"
elif [ $timeofday = no ]; then
   echo "Good afternoon"
else
   echo "Sorry, $timeofday not recogonized. Enetr yes or no"
fi

exit 0

خوب برنامه خیلی بهتر شد اما هنوز مشکل داره.زیرا Yes و No رو تشخیص نمیده و یا yEs و nO رو هم تشخیص نمیده
اما قبل از اینکه به این مشکلات بپردازیم توجه شما رو به یک مشکل بزرگ تر جلب میکنم

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

جواب این سوال :
به پیغام خطایی که به شما داده میشه توجه کنید
[: =: unary operator expected
به نظر شما دلیلش چی میتونه باشه(حدث من اینه که مربوط به متغیر میشه ویا مقداری که داخل اونه چون با تمام مقادیر غیر از اینتر برنامه با موفقیت اجرا میشه)
بیاید مقادیر رو جایگزین متغیر ها کنیم و خط به خط برنامه رو برای خودمون تصور کنیم
دقت کنید که به جای مقدار دادن به متغیر اینتر زدیم پس داخل این متغیر هیچی (حتی null یعنی /0) هم وجود نداره
پس برنامه در قسمت شرط به شکل زیر در میاد
if [ = "yes"]فکر کنم مشکل معلوم شد از کجاست
پس قسمت شرط کد رو به شکل زیر تغییر میدم
if [ "$timeofday" = "yes" ]حالا اگه مقادیر رو جایگزین متغیر ها کنیم مشکلی پیش نمیاد زیرا کد به شکل زیر تبدیل میشه (با اینتر زدن بجای وارد کردن مقدار برای متغیر)
if [ "" = "yes"]خوب پس کد ما در نهایت به شکل زیر در اومد


#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday

if [ "$timeofday" = "yes" ]; then
   echo "Good morning"
elif [ "$timeofday" = no ]; then
   echo "Good afternoon"
else
   echo "Sorry, $timeofday not recogonized. Enetr yes or no"
fi

exit 0
که این کد خیلی امن تره و اطمینان بیشتری بهش میره

در پست های بعد به بررسی for و حلقه ها می پردازیم(مثل while و until) و در بعد از اون با case آشنا خواهیم شد
با این ابزار میشه برنامه رو بهینه کرد تا سوال فوق اینقدر تکرار بشه تا بالا خره کاربر یک مقدار قابل قبول رو وارد کنه و همچنین تمام حالات یک عبارت با حروف بزرگ و کوچیک چک بشه!!! \\:D/
فعلا همه دوستان رو به خدای بزرگ میسپارم
التماس دعا
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: arastoo.s در 04 شهریور 1388، 10:35 ق‌ظ
سلام به دوست عزیز خودم  :)
۲ تا وب برات میزارم شاید به کارت اومد
البته خودت استاد این کاری اما گفتم شاید کمکی کنه
http://www.yolinux.com/
http://linux.org.mt/article/terminal
این کاری که میکنی محشره
به کارت ادامه بده
ما هم چنان منتظریم. =D>
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 04 شهریور 1388، 03:38 ب‌ظ
سلام arastoo.s جان
سایت های خیلی جالبی بودند
میشه یه زحمت بکشی لطفا (ویا دیگر دوستان)
من خودم این متنی رو که هر چند روز یکبار مینویسم با ترجمه از چندین سایت و کتاب هست و لذا دیگه وقت و انرژی اونو ندارم که چند تا سایت دیگه رو هم چک کنم
از طرف دیگه سایت هایی که معرفی کردید (مخصوصا دومی)‌به نظرم خیلی جالب وخوب و منظم اومد و حیفم میاد که از دست بدمشون
لذا اگه زحمت بکشید و شما هم پست بزنید (با ترجمه آزاد از این سایت ها که فرمودید و سایت ها و کتاب های دیگه) خیلی عالی میشهو این مجموعه کامل تر میشه
ممنون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: mimook در 05 شهریور 1388، 12:43 ق‌ظ
با تشکر از arastoo.s برای معرفی این دو سایت با ارزش
نقل‌قول
http://www.yolinux.com/
http://linux.org.mt/article/terminal
و با کمی تشکر از مترجم گوگل ;) برای ترجمه خنده دارش
و تشکر فراوان از سید محمود رضا سجادی عزیز
 :)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: firethumbs در 06 شهریور 1388، 12:00 ب‌ظ
افرین
خیلی باحالی  \\:D/
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 10 شهریور 1388، 06:38 ب‌ظ
سلام مجدد
ادامه میدیم البته باید ببخشید که خیلی دیر شد

اگه یادتون باشه تا اونجا اومدیم که elif رو شناختیم و یک اررور در باره استفاده از متغیر ها در if  رو بررسی کردیم

حالا FOR

معمولا وقتی از این استفاده می کنیم که یک متغیر قراره چندین مقدار معلوم و مشخص رو به خودش برای عمل یا اعمالی خاص اختصاص بده
مثلا فرض کنید که یک تابع یا فرمول دارید که قراره برای مقادیری خاص مقدارش محاسبه بشه - اگه این تابع رو F(x) اسم گذاری کنم باید مقادیر F را برای مقادیر مشخصی از x حساب کنیم
در اینجا استفاده از for خیلی مناسبه

شکل کلی این دستور به شکل زیره
for variable in values
do
   statements
done

یک اسکریپت برای تست کردن این دستور
#!/bin/sh

for foo in bar fud 43
do
   echo $foo
done
exit 0

همونجوری که انتظار میره سه عبارت bar - fud - 43 به ترتیب در مونیتور چاپ میشن
حالا یه سوال . برای جواب دادن به سوال زیر باید پستهای قبلی ilius جان رو با دقت مطالعه کنید
سوال : اگر خط for در کد بالا به شکل زیر تغییر کنه چه اتفاقی می افته و چرا؟
for foo in "bar fud 43"
حالا به کد زیر دقت کنید
#!/bin/sh

for file in $(ls f*.sh);do
   lpr $file
done
exit 0

این کد نکات بیشتری از کد قبلی داره که باید بررسی بشه
این کد برای چاپ تمام اسکریپت هایی به کار میره که با حرف f اسمشون شروع میشه و دارای پسوند .sh هستند

نکته : بسط دادن و جایگزینی تنها در زمان اجرا انجام میشه و نه در زمان نوشتن کد و لذا ارورهایی از این قبیل تنها در زمان اجرا معلوم میشن مانند همون اروری که در پست قبلی در باره اون با هم صحبت کردیم

حالا while

واضحه که for بعضی جاها خوبه ولی نه همیشه
اگر یک سری از استرینگ ها رو داشته باشیم که به نوبت جایگزین بشن استفاده از for مناسبه و یا اینکه این عبارات از جایی خونده بشن
اما اگر قرار باشه یک سری عدد رو در یک حلقه قرار بدیم هرگز کد خوبی رو به دست نمیاریم
مثل کد زیر
#!/bin/sh
for foo in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
do
   echo “here we go again”
done
exit 0

راه حا استفاده از while هستش
شکل کلی این دستور
while condition do
  statements
done

وحالا یک برنامه خیلی ضعیف و نا امن برای چک کردن پسورد مینویسیم
#!/bin/sh
echo “Enter password”
read trythis
while [ “$trythis” != “secret” ]; do
  echo “Sorry, try again”
  read trythis
done
exit 0

و حالا یک کد دیگه که خروجیش برای شما تقریبا آشناست (شبیه یکی از کد های گذشته خودمونه)
#!/bin/sh
foo=1
while [ “$foo” -le 20 ]
do
   echo “Here we go again”
   foo=$(($foo+1))
done
exit 0

این کد چیکار میکنه؟
آیا طرز کار اون شبیه کد زیر نیست؟
for foo in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
برای یاد آوری (-le( چیکار میکرد آیا به معنی کوچیکتر یا مساوی نبود؟

نکته : شل های قدیمی از expr بجای عبارت $(()) استفاده می کنن که البته bash از نوع $(()) پشتیبانی میکنه و ما از این استفاده میکنیم.جالبه بدونیدکه این نوع سرعتره و لذا در سیستم هایی که از این نوع پشتیبانی میکنن بهتره از همین شکل استفاده کنید تا بهره وری سیستم شما افزایش پیدا کنه

دستور بعد یعنی until

until condition
do
   statements
done

وحالا یک کد
#!/bin/sh
until who | grep “$1” > /dev/null
do
   sleep 60
done
# now ring the bell and announce the expected user.
echo -e \\a
echo “**** $1 has just logged in ****”
exit 0

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

دستور جدید و یک دستور زیبا و پر کاربرد : CASE
در نگاه اول شبیه if میمونه که البته باید بگم چند if تو در تو اما از نظر کار کرد و سرعت خیلی با if متفاوته و واضحه که نمیشه همیشه از case بجای if استفاده کرد اما تمام case ها قابلیت جایگزینی با if رو دارند.سرعت case بارها از if بیشتره و لذا در هر جایی که امکان استفاده از case وجود داره بهتره که از این دستور بجای if استفاده بشه

شکل کلی :
case variable in
  pattern [ | pattern] ...) statements;;
  pattern [ | pattern] ...) statements;;
  ...
esac

دقت کنید که هر pattern با دابل سمی کولن خاطمه پیدا میکنه!دلیل این امر هم اونه که شما میتونید چندین خط رو جایگزین statement کنید ولذا دابل سمی کولن وجودش لازمه تا پایان هر pattern رو به سیستم اعلام کنه

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

حالا بر میگردیم به کد قدیمی خودمون در باره پیغام صبح بخیر یا عصر بخیر (به یاد دارید؟)

#!/bin/sh
echo “Is it morning? Please answer yes or no”
read timeofday
case “$timeofday” in
    yes) echo “Good Morning”;;
    no ) echo “Good Afternoon”;;
    y ) echo “Good Morning”;;
    n ) echo “Good Afternoon”;;
    * ) echo “Sorry, answer not recognized”;;
esac
exit 0

این کد خیلی زیبا تر از کدهای گذشته و سرعتره و جالب اینه که علاوه بر yes , no عبارت های y ,n رو هم شناسایی میکنه که این به زیبایی برنامه کمک میکنه و همونجوری که میبینید در صورتی که عبارت غیر قابل قبولی هم وارد بشه مانند کد های گذشته پیغام و عکس العمل مناسبی رو از خودش بروز میده

ما قبلا در باره عمل گر های منطقی باه مصحبک کرده بودیم
حالا وقت اونه که کد بالا رو خوانا تر و زیبا تر کنیم با حجم کمتر و سرعت اجرای بالا تر(البته سرعت یک چیز آماری در برنامه های بزرگه که بعدا در باره اون صحبت میکنیم)

  #!/bin/sh
   echo “Is it morning? Please answer yes or no”
   read timeofday
case “$timeofday” in
    yes | y | Yes | YES ) echo “Good Morning”;;
    n* | N* )             echo “Good Afternoon”;;
    * )                   echo “Sorry, answer not recognized”;;
esac
exit 0

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

به عنوان مثال یک case یا if رو  در نظر بگیرید
در بعضی موارد ترتیب pattern ها و یا elif ها در نتیجه منطقی برنامه اثری نداره. در این موارد تغییر جای patternها و یا elif ها اثر مستقیمی بر روی سرعت اجرا میذاره و برنامه نویس باید بهترین حالت و چینش رو انخاب کنه
اثر این موارد به این شکله که باید شیوه compile و یا اجرا رو برحسب مورد مورد بررسی قرار داد
در باره case و اجرای اسکریپت ها باید بدونید که در کد بالا اگر به صورت آماری بیشتر جواب n داده میشه بهتره که کد به شکل زیر تغییر کنه تا سرعت (به صورت آماری) افزایش پیدا کنه و دیلی افزایش سرعت هم اینه که یک pattern کمتر تست میشه زیرا با تست اولین pattern برنامه با موفقیت روبرو میشه و لذا pattern های بعدی رو چک نمیکنه و لذا سرعت بالا میره

  #!/bin/sh
   echo “Is it morning? Please answer yes or no”
   read timeofday
case “$timeofday” in
    n* | N* )             echo “Good Afternoon”;;
    yes | y | Yes | YES ) echo “Good Morning”;;
    * )                   echo “Sorry, answer not recognized”;;
esac
exit 0

و حتی اگر در بیشتر موارد جواب به سول فوق مثبته باز هم کد بالا در خط pattern باید بهشکل زیر تغییر کنه چون y بیشتر از yes مورد استفاده قرار میگیره و لذا برنامه با چک کردن عبارت اول وارد پترن میشه و عبارات بعد از | رو چک نمیکنه
y | yes | Yes | YESاز این به بعد کمتر در باره سرعت اجرا حرف میزنیم زیرا اصل سرعت تنها یک دید و برداشت توسط برنامه نویسه و به نظر اون بستگی داره

برای کارایی بیشتر کد فوق باید خروج های متفاوتی برای pattern های مختلف اضافه کنیم که کد به شکل زیر در میاد
#!/bin/sh
echo “Is it morning? Please answer yes or no”
read timeofday
case “$timeofday” in
    yes | y | Yes | YES )
           echo “Good Morning”
           echo “Up bright and early this morning”
           ;;
    [nN]*)
           echo “Good Afternoon”
           ;;
    *)
           echo “Sorry, answer not recognized”
           echo “Please answer yes or no”
           exit 1
           ;;
esac
exit 0

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

[yY]|[Yy][Ee][Ss]
ولذا کد اصلی به شکل زیر در میاد

#!/bin/sh
echo “Is it morning? Please answer yes or no”
read timeofday
case “$timeofday” in
   [yY] | [Yy] [Ee] [Ss] )
           echo “Good Morning”
           echo “Up bright and early this morning”
           ;;
    [nN]*)
           echo “Good Afternoon”
           ;;
    *)
           echo “Sorry, answer not recognized”
           echo “Please answer yes or no”
           exit 1
           ;;
esac
exit 0

بحث درباره list ها :
بعضی وقتها شما لازم دارید تا چند دستور رو با هم و یا به دنبال هم انجام بدید یا چک کنید
وقتی این موضوع برای شما شفاف میشه که قصد چک کردن چندین شرط پیچیده و تو در تو رو داشته باشید
یک راه که البته راه خوبی نیست استفاده از کد زیره
if [ -f this_file ]; then
    if [ -f that_file ]; then
        if [ -f the_other_file ]; then
            echo “All files present, and correct”
        fi
    fi
fi

if [ -f this_file ]; then
   foo=”True”
elif [ -f that_file ]; then
   foo=”True”
elif [ -f the_other_file ]; then
   foo=”True”
else
   foo=”False”
fi
if [ “$foo” = “True” ]; then
   echo “One of the files exists”
fi


بحث بعد رد باره OR List ها و AND List ها خواهد بود

--------------------------------------------------------------------------------------------

ilius جان چرا دیگه پست نمیدی؟
بقیه دوستان هم همچنین
آقا ما منتظریما
اساتید محترم!!!!!هم اکنون نیاز مند یاری سبزتان هستیم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: mimook در 10 شهریور 1388، 11:58 ب‌ظ
لطفا یه نگاهی بکنید ببینید من درست میگم یانه!
چند مورد از کدها درست نیستن به این صورت که
while [ “$foo” -le 20 ]ایا درستش این نیست؟
while [ $foo -le 20 ]و این
case “$timeofday” inدرستش این نیست؟
case $timeofday inو این یکی هم
   [yY] | [Yy] [Ee] [Ss] )درستش اینه
   [yY] | [Yy][Ee][Ss] )بعد از امتحان کردن کدها دیدم درستشون ایناست که گفتم.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 11 شهریور 1388، 11:09 ق‌ظ
سلام میموک جان
در باره اشتباه آخری که ازم گرفتی باید بگم شما درست میگی و درستش به شکل زیره
   [yY]|[Yy][Ee][Ss] )
یعنی هیچ فاصله ای حتی بین | هم نداره

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

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

به هر حال از توجه و مخصوصا اینکه غلط بنده رو گرفتید ممنون (در پست اصلی تصحیحش کردم)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: mimook در 11 شهریور 1388، 01:44 ب‌ظ
 :)خیلی خوشحالم و ممنونم از پیگیری.
بله مشکل من بخاطر کپی و پیست کردن کدها بود :P و بعد از نوشتن دستی دابل کوتیشن کد بدون ایراد اجرا شد.
به هر حال خیلی کارت درسته! (چون هم اسم خودمی سید محمود)
موفق باشی
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 11 شهریور 1388، 05:31 ب‌ظ
سلام مجدد و تشکر فراوان از میموک جان عزیز برای پستشون
(میموک جان ما کوچیکتیم. وظیفه بود عزیز)

قبل از اینکه در باره برنامه نویسی با هم صحبت کنیم یک سوا از شما میپرسم (سوال منطقی) که البته جوابش رو در پست قبل دادم
فرض کنید که با یک عبارت منطقی روبرو هستید. در این صورت اگر این عبارت از چندین عبارت ساده تشکیل شده باشه که بین جملات اون حرف (و) قرار داشته باشه و اولین عبارت اشتباه باشه شما چیکار میکنید
به عنوان مثال فذص کنید الان هوا آفتابیه. آیا برای تشخیص صحت جمله زیر مطالعه کل اون لازمه؟
<< اگر هوا بارانی باشه و ..... من به خانه می روم >>
جمله فوق بدون درنظر گرفتن بقیه اون یعنی (...) غلط هستش و ارزش منطقی برابر False داره چون طبق فرض ما هوا بارانی نیست پس نیازی به مطالعه و بررسی ادامه جمله نیست
در باره جمله زیر چطور در صورتی که هوا آفتابی باشه
<<اگر هوا آفتابی باشه یا ..... من به دیدار شما خواهم آمد>>
این جمله به هرحال درسته چون با عبارت منطقی (یا) جملات از هم جدا شدند و جمله اول درسته و نیازی به چک کردن بقیه جمله نیست
به صورت خلاصه اگر T برابر ارزش منطقی جملات یا عبارات صحیح و F برابر ارزش منطقی جملات یا عبارات منطقی غلط باشه چنین نتیجه میگیریم
T && .... = ?
F && ...= F
T || ... = T
F || ... = ?
در جاهایی که از ؟ استفاده شده منظور اینه که نتیجه معلوم نیست و به قسمت نامعلوم جمله یعنی (....) بستگی داره و باید بقیه جمله رو مطالعه کرد و همچنین || معادل با OR و عبارت && برابر با AND منطقی است

دلیل اینکه این بحث رو مطرح کردم
۱)برای اینکه کدهاتون رو راحت تر بهینه کنید و شیوه کار شیشتم رو در برخورد با عبارات تودرتو و پشت سر هم بدونید (لذا دز استفاده از AND یا شرط های اجماعی (همه باید صادق باشند مثل IF های تو در تو)باید عبارتی رو اول قرار بدید که احتمال اینکه غلط در بیاد بیشتره و در این صورت به علت اینکه عبارات کمتری چک میشه سرعت اجرا بالا میره و به طور مشابه در جایی که از OR استفاده می کنید یا شرط های موازی دارید مثل IF و ELIF ها که فقط یکیشون اجرا میشن بهتره که عبارتی اول بیاد که معمولا صحیح هستش. در عباراتی که از ترکیب OR و AND ساخته میشه هم باید به ترتیب اولویت ها دقت کرد تا کدی بهینه و سریع داشته باشیم

۲)اینکه کد زیر مربوط به && و || یعنی AND و OR میشه که همونجوری که گفتم در && ممکنه فقط اولین statement اجرا بشه و به بیان بهتر فقط تا statement ای اجرا میشه که ارزش منطقی صحیح داشته باشه و در باره OR هم فقط تاجایی اجرا میشه که ارزش منطقی غلط داشته باشه


The AND List
شکل کلی
statement1 && statement2 && statement3 && ...همونجوری که گفته شد عبارات به ترتیب از سمت چپ اجرا میشن.در صورتی که ارزش True داشته باشن بعدی هم اجرا میشه و لی اگر غلط باشه ارزش کل برابر False قرار میگیره و دیگه عبارتی اجرا نمیشه.
#!/bin/sh
touch file_one
rm -f file_two
if [ -f file_one ] && echo “hello” && [ -f file_two ] && echo “ there”
then
    echo “in if”
else
    echo “in else”
fi
exit 0

خوب این کد چیکار میکنه؟
دستور touch که حتما باهاش آشنایید.چک میکنه که فایل file_one وجود داره یا نه و اگر وجود نداشت اون رو ایجاد میکنه. به عبارت دیگه این اطمینان رو به ما میده که این فایل در ادامه اجرای اسکریپت حتما وجود داشته باشه
در طرف مقابل دستور rm این اطمینان رو ایجاد میکنه که file_two حتما وجود نداره و اگرم وجود داشته الان دیگه پاک شده

بنابر این قسمت اول عبارت که به برسی file_one میپردازه حتما true هستش چون با دستور touch این اطمینان رو بدست اوردیم
لذا دستور بعدی یعنی echo اجرا میشه که این هم موفقیت آمیزه و خروجی True داره چون دستور echo همیشه خروجی True داره پس عبارت hello بر روی مونیتور چاپ میشه
حالا قسمت سوم یعنی چک کردن فایل file_two اجرا میشه که موفقیت آمیز نیست!!!! چون خودمون با دیستور rm از عدم وجود اون اطمینان پیدا کرده بودیم پس مقدار این عبارات حتما false هستش
در همینجا اجرا و بررسی این list متوقف میشه چون مقدار کل برابر false میشه , و لذا عبارت there هیچوقت بر روی مونیتور چاپ نخواهد شد!!! از طرف دیگه گفتیم ارزش کل نیز برابر false میشه به علت وجود یک flase (عدم وجود فایل file_two) پس وارد قسمت else میشیم و عیارت in else نیز بر روی مونیتور چاپ خواهد شد


The OR List

statement1 || statement2 || statement3 || ...
خب حالا کد فوق رو تغییر بدید به شکلی که از عدم وجود فایل file_one اطمینان داشته باشید و نیازی به file_two نداریم
خط شرط رو نیز به شکل زیر تغییر بدید
if [ -f file_one ] || echo “hello” || echo “ there”
پس کل کد به شکل زیر در میاد
    #!/bin/sh
    rm -f file_one
    if [ -f file_one ] || echo “hello” || echo “ there”
    then
         echo “in if”
    else
         echo “in else”
    fi
    exit 0

خروجی رو به راحتی میشه بررسی کرد
file_one حتما وجود نداره و خروجی اون برابر false هستش اما دستور بعدی یعنی echo "Hello" مقداری برابر با true داره پس بررسی متوقف میشه چون با یک true برخورد کرده و لذا ارزش کل برابر با true قرار میگیره و ادامه اجرا به داخل بدنه اصلی if منتقل میشه و عبارت in if بر روی مونیتور چاپ میشه

بحث شیرین بعدی بانام بلوک ها یا statement blocks
بعضی وقتها شما نیاز دارید تا یک مجموعه دستور رو بجای یک تک دستور (جایی که فقط یک statement میشه گذاشت)قرار بدید
به عنوان مثال چند دستور در بین دو عبارت && یا || قرار بگیره.
شما میتونید این کا رو با چسبوندن این مجموعه دستور با علامت {} انجام بدید. علامت های {} یک بلوک رو به وجود میاره و سیستم با این بلوک به شکل یک تک دستور برخورد میکنه و به عبارت دیگه این بلوک یکپارچه است و برابر یا یک single statement هستش
به عنوان مثال به کد زیر دقت کنید
get_confirm && {
   grep -v “$cdcatnum” $tracks_file > $temp_file
   cat $temp_file > $tracks_file
   echo
   add_record_tracks
}

خوب فکر میکنم برای این بحث کافیه و لذا بحث جدید دیگه ای رو شروع میکنم FUNCTIONS یا توابع
شما میتونید در اجرا و نوشتن کدهاتون از توابع استفاده کنید و توابعی رو برای خودتون بنویسید تا کدتون منظم تر و خوانا تر بشه!
در بعضی موارد (بسته به کد) نوشتن تابع اثر مثبت زیادی بر روی سرعت و نحوه اجرای برنامه میذاره
به عنوان یک جایگزین و تقریب ذهن شما میتونید یک اسکریپت یا کد بزرگ رو به چندید اسکریپت کوچیک بشکونید که هرکدوم از اونها یک عمل کوچیکی رو انجام میدند

اگر شما از اینکه برنامه های بزرگ رو در شل بنویسید میترسید یا فکر میکنید کارامد نیست باید بهتون یادآور بشم که خیلی از برنامه های بزرگی رو که استفاده میکنید در شل نوشته شدندو باید یاداوری کنم که FSF autoconf و خیلی برنامه های نصب پکیج در لینوکس اسکریپت های شل هستند!
نکته مهم در این مورد اینه که این اطمینان رو دارید که برنامه شما همیشه در لینوکس قابل اجراست چون هیچ لینوکسی بدون شل نمیشه و لذا در گستره وسیعی از unix و لینوکس سیستم ها برنامه شما حتما اجرا میشه

برای اینکه یک تابع رو تعریف بکنیم از شکل زیر استفاده میکنیم
function_name () {
  statements
}

و حالا یک کد زیبا و بسیار ساده
#!/bin/sh
foo() {
    echo “Function foo is executing”
}
echo “script starting”
foo
echo “script ended”
exit 0

چند نکته مهم:
۱- همیشه باید قبل از صدا کردن یا به عبارتی invoke کردن تابع اون رو تعریف کرده باشید
پس باید  حتما متن توابع قبل از اولین صدا زدن تابع قرار گرفته باشه.
۲-وقتی یک تابع صدا زده میشه و شروع به اجرا میکنه تمام متغیر های پارامتری از قبیل $*, $@, $#, $1, $2, چیز های مشابه با پارامتر هایی که به تابع پاس داده شدند جایگزین میشن و در واقع به همین صورت شما به پارامتر هایی که به تابع پاس داده شده دسترسی پیدا میکنید و دقیقا پس از پایان تابع و بازگشت به متن اصلی برنامه تمام متغیر های پارامتری به مقدار اصلی و اولیه خودشون بر میگردند تا در ادامه برنامه بشه از اونها استفاده کرد

در ادامه این پست به بررسی چگونگی قراردادن یک خروجی در تابع میپردازیم اما توجه داشته باشید چون برخی از شل های قدیمی بعد از اجرای تابع مقدار خروجی اون رو بر نمیگردونند اگر پرتابل بودن و قابلیت جابجایی کد برای شما خیلی مهمه(به عنوان مثال اگر یک هکر هستید) روی این قابلیت زیاد حساب نکنید.

با استفاده از دستور return میشه یک تابع رو مجبور کرد تا مقدار عددی رو به عنوان خروجی برگردونه. راه معمول برای پس فرستادن مقادیر استرینگ به عنوان خروجی استفاده از متغیر هایی هستش که بعد از اجرای تابع نیز قابل استفاده باشند و یا اینکه به عنوان جایگزین با دستور echo این متن را چاپ کنیم و به شکل زیر این مقدار رو در یک متغیر ذخیره کنیم
foo () { echo JAY;}
...
result=”$(foo)”

حالا باید یک بحث دیگه رو بررسی کنیم به نام scope یا حوضه دید
این بحث خیلی طولانی ومهمه و برای همین بحث کامل تر و گسترده تری رو بعدا به این موضوع اختصاص میدم اما فعلا توجه کنید که اگر یک متغیر را مستقیما محلی تعریف کنید فقط در محل و حوضه خودش قابل ذسترسی و مشاهده هست
متغیر های محلی با عبارت local مشخص میشن
هر تابع برای خودش یک حوضه داره و لذا به متن زیر دقت کنید
   #!/bin/sh
   sample_text=”global variable”
   foo() {
       local sample_text=”local variable”
       echo “Function foo is executing”
    echo $sample_text
}
echo “script starting”
echo $sample_text
foo
echo “script ended”
echo $sample_text
exit 0

خوب این بحث رو در پست بعدی ادامه میدم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 12 شهریور 1388، 06:18 ب‌ظ
 سلام
هر حوضه مثل یک برنامه جدید میمونه پس اگر متغیری به صورت local درونش تعریف بشه فقط در اون دیده میشه ولی در صورتی که در اسکپی نتغیری با نام تکراری به صورت local تعریف نشه شما میتونید در شرایطی به متغیر های سطوح بالا تر دسترسی داشته باشید

در اسکریپت زیر روش پاس دادن متغیر ها رو بین توابع و متن اصلی اسکریپت مشاهده می کنید
#!/bin/sh
yes_or_no() {
  echo “Is your name $* ?”
  while true
  do
     echo -n “Enter yes or no: “
     read x
     case “$x” in
       y | yes ) return 0;;
       n | no ) return 1;;
       * )        echo “Answer yes or no”
     esac
  done
}

echo “Original parameters are $*”
if yes_or_no “$1”
then
   echo “Hi $1, nice name”
else
   echo “Never mind”
fi
exit 0

خوب فکر نمیکنم نیازی به تفسیر باشه

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

اسکریپت :
#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
    if [ -d “$file” ]; then
        break;
    fi
done
echo first directory starting fred was $file
rm -rf fred*
exit 0

دستور جدید یعنی ( : )
این دستور معادل با true هستش و البته نکته مهم اینه که اگرچه خیلی خیلی سریعتر از true اجرا میشه اما معمولا کد نهایی از خوانایی کمی برخورداره
به عنوان مثال به عبارت زیر دقت کنید
while :این عبارت معادل با عبارت زیره
while trueکه هر دو یک حلقه بی پایان رو به وجود میارن

یک کار برد دیگه این دستور برای مقدار دهی به یک متغیر در شل هستش
به عنوان مثال :
: ${var:=value}بدون : شل عبارت $var رو به صورت یک دستور تفسیر میکنه و قصد اجرای اون رو خواهد داشت

نکته : در کدها و اسکریپت های قدیمی ممکنه که علامت : رو در اول برخی خط ها ببینید تا اون خط ها کامنت باشند اما در شل های جدید تر (مثل اینی که شما باهاش کار میکنید) حتما باید کامنت ها با علامت # شروع بشن چون خیلی کارامد تر هستند و خیلی بهتر اجرا میشن

#!/bin/sh
rm -f fred
if [ -f fred ]; then
    :
else
    echo file fred did not exist
fi
exit 0


دستور جدیدی دیگر Continue
دستور قبل رو باهاش در C آشنا شده بودید.این دستور هم همون کاری رو میکنه که در C انجام میده
یعنی حلقه رو کوتاه میکنه و هرگاه برنامه با این دستور در حلقه مواجه بشه از بقیه حلقه تا انتهای اون صرف نظر میکنه و شروع به اجرای حلقه از ابتدای اون میکنه(از حلقه خارج نمیشه)
#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
    if [ -d “$file” ]; then
          echo “skipping directory $file”
        continue
    fi
    echo file is $file
done
rm -rf fred*
exit 0

این دستور میتونه یک عدد به عنوان پارتمتر غیر اجباری داشته باشه تا به عنوان شماره استفاده بشه و مقداری از ابهام حلقه های تو در تو کم کنه ولی این پارامتر به ندرت استفاده میشه زیرا در مواقعی خودش باعث ناخوانی کد میشه. به مثال زیر دقت کنید
ٰٰٰٰٰٰٰٰfor x in 1 2 3
do
   echo before $x
   continue 1
   echo after $x
done

خروجی :
before 1
before 2
before 3

دستور دات (.)

دستور دات باعث میشه تا دستورات در شل فعلی اجرا بشن
. ./shell_scriptبه صورت دیفالت وقتی یک اسکریپت اجرا میشه و یا یک دستور خارجی رو اجرا میکنید یک محیط جدید (subshell) ساخته میشه و دستورات در این محیط جدید اجرا میشه اما دستور دات و منابع خارجی (دو هم معنی) باعث میشن تا در همون جایی که اسکریپت صدا زده شده یا دستور اجرا شده اجرا بشن
معنی این جملات اینه که به صورت دیفالت هر تغییری که اسکریپت یا دستوری بر روی متغیر های محلی بده از بین میره و دستور دات از طرف دیگه این امکان رو میده که بر روی محیط فعلی تغییر رو ایجاد کنید
موقعی کاربرد این موضوع رو متوجه میشید که یک اسکریپت نوشته باشید تا محیط رو تنظیم و آماده کنه تا بعدا یک اسکریپت دیگه اجرا بشه!
به عنوان مثال اگر بر روی چند پروژه به صورت همزمان کار کنید به این نکته برخورد کردید که برای هر برنامه باید پارامتر ها به شکل های مختلفی ست بشه به عنوان مثال شاید لازم باشه که برای اجرای یک برنامه قدیمی یک نسخه قدیمی تری از کامپایلر رو invoke کنید

دستور دات در شل کمی شبیه به دستور #include در زبان برنامه نویسی C هستش. اگر چه این دستور چیزی رو به اسکریپت شما نمی چسبونه اما چون محل اجرای دستور رو تغییر میده به شما این امکان رو میده که دستوراتی رو و توابعی رو اجراکنید که در اسکریپت شما تعریف نشدند

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

نام : classic_set
#!/bin/sh
version=classic
PATH=/usr/local/old_bin:/usr/bin:/bin:.
PS1=”classic> “

نام : latest_set
#!/bin/sh
version=latest
PATH=/usr/local/new_bin:/usr/bin:/bin:.
PS1=” latest version> “

 حالا به استفاده از دستورات و خروجی دستورات دقت کنید
$ . ./classic_set
classic> echo $version
classic
classic> . latest_set
latest version> echo $version
latest
latest version>

آخرین دستور این پست که باهم بررسی میکنیم echo

این دستور معادل با printf در شل های جدید تر است.از این دستور زیاد استفاده کردیم پس چیزی دیگه نمیگم غیر از چند نکته کوتاه
بزرگ ترین مشکل در استفاده از این دستور چگونگی ایجاد خط جدید یا new line هستش و دلیل ایم مشکل هم اینه که ورژن های مختلف UNIX راه حل های متفاوتی رو پیشنهاد دادن و البته معمول ترین روش در لینوکس به شکل زیر هستش
echo -n “string to output”گاهی هم به شکل زیر
echo -e “string to output\c”
مدل دوم یعنی echo -e این اطمینان رو ایجاد میکنه که مفسر شما برای تفسیر کاراکتر های بعد از \ مانند \n برای اینتر و \t برای tab فعال هستش.اگرچه معمولا به صورت دیفالت فعال هست

اگر اسکریپت شما قراره در مجموعه وسیعی از unix و linux اجرا بشه میتونید از دستور خارجی tr استفاده کنید برای ایجاد خط جدید که البته خیلی خیلی کند تره
اما اگه قراره فقط برروی سیستم های linux اجرا بشه به احتمال زیاد با دستور echo -n مشکل سما حل خواهد شد

در پست بعد به بررسی eval , exec , exit n و چند دستور دیگر خواهیم پرداخت
و حالا به استفاده از دو اسکریپت
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: firethumbs در 14 شهریور 1388، 07:33 ب‌ظ
چاکریییییییییییییییییییییییییییییییییییییییییییییییییییم خیلی باحالی \\:D/ \\:D/ \\:D/ \\:D/ :guitar: :lolflag: O0 :-({|= :popcorn: =D> ):P
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 15 شهریور 1388، 12:32 ق‌ظ
.... O0 .....

آقا چقدر مو داری شما!!! خدا ازت نگیره  ;)

شوخی کردم  ;D به دل نگیری یک وقتا


بحث رو ادامه میدم با مبحث زیبای eval

ای دستور از evaluate میاد و برای بررسی و ارزیابی آرگومان ها استفاده میشه
این دستور در داخل خود شل ساخته و برنامه نویسی شده و در جای دیگه ای به عنوان یک دستور خارجی وجود نداره
شاید توضیح این دستور یکم سخت باشه واسه همین اون رو بایک مثال شرح میدم

foo=10
x=foo
y='$'$x
echo $y

خروجی این دستورات چیه؟
دقیقا خود عبارت foo$ خروجی این دستور هست و نه چیز دیگه ای (نه مقدار اون)

حالا به دستورات زیر دقت کنید

foo=10
x=foo
eval y='$'$x
echo $y

خروجی این دستور عدد ۱۰ هست!!!
دستور eval تا مقداری میشه گفت شبیه به یک دالرساین ($) اضافه عمل میکنه.این دستور به شما مقدار متغیر رو میدهد
شاید لازم باشه که تذکر بدم در دستورات بالا در خطی که نوشته شده x=foo , عبارت foo یک استرینگ ساده هست و نه یک متغیر ولذا مقداری غیر از عبارت foo نداره
میشه این گفته رو با دستور echo $x تست کرد. دلیل این امر هم عدم وجود $ در این خطه
اگه قرار بود مقدار متغیری به نام foo درون متغیری به نام x ریخته شه باید یک $ قبل از نام متغیری کهخونده میشه (یعنی foo$) گذاشته بشه که چون در اینجا این علامت وجود نداره پس یک استرینگ سادست و بس
لذادرعبارتی که دردستورات اول در مقدار دهی y استفاده شده تنها دو استرینگ درکنارهم قرار دارند و خروجی آن رو هم که مشاهده میکنید
در مجموعه دستورات دوم - دستور eval این امکان رو به ما میده تا استرینگ داخل y تفسیر بشه و مقدار متغیری که با این استرینگ همنام هستش در اون جایگزین بشه
لذا میشه گفت که در مجموعه دستور اول عبارت foo=10 زیادی هست و هیچ کاری انجام نمیده!

دستور eval خیلی پرکاربرد و کارامد هستش
این دستور این امکان رو میده که کد در حال اجرا ساخته بشه و اجرا بشه.به قول خارجکی ها کدها generate and run on the fly میشن  :P
درسته که این کدها معمولا پیچده و سخت تفسیر خواهند شد اما عدم وجود این دستور باعث میشه تا نوشن برخی کدها بسار دشوار ودر بعضی شرایط غیر ممکن بشه

exec
این دستور دو استفاده متفاوت داره!!!!
معمولا برای این استفاده میشه که شل فعلی رو با یک برنامه دیگر جایگزین کنه
exec wall "Thanks for all the fish"در این اسکریپت - شل با دستور wall جایگزین خواهد شد

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

استفاده دیگر این دستور برای تغییر دادن مفسر فعلی فایل هست
exec 3<afile
این دستور باعث میشه که مفسر فایل شماره ۳ برای خواندن فایل afile باز بشه(منظور از مفسر descriptor هست)
واقعا از این منظور زیاد استفاده میشه

exit n و بقیه دستورا باشه طلبتون
امشب خیلی خستم اما چون دوستمون firethumbs جان پست داده بودند دلم نیومد که هیچی پست ندم ولذا همینقدر رو از من قبول کنید
یک گله هم کنم از اساتید محترم
آقا چرا در این تاپیک پست نمیدید؟؟؟؟ دست مارم بگیرید. چرا تحویل نمیگیرید دوستان؟ یه لطفی مرحمتی!!!
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: firethumbs در 15 شهریور 1388، 01:13 ب‌ظ
.... O0 .....

آقا چقدر مو داری شما!!! خدا ازت نگیره  ;)

شوخی کردم  ;D به دل نگیری یک وقتا


امشب خیلی خستم اما چون دوستمون firethumbs جان پست داده بودند دلم نیومد که هیچی پست ندم ولذا همینقدر رو از من قبول کنید
یک گله هم کنم از اساتید محترم
آقا چرا در این تاپیک پست نمیدید؟؟؟؟ دست مارم بگیرید. چرا تحویل نمیگیرید دوستان؟ یه لطفی مرحمتی!!!

خیلی مخلصیم

اقا موهام داره مثل برگ پاییزی می ریزه. داغم را تازه کردی. دعا کن که بمونه رو کله ام
خیلی لطف کردید اقا . دستتون درد نکنه.همین قدر هم از سرمون زیاده.! ما که بی سوادیم اگه چیزی بلد بودیم حتما باهات همکاری می کردیم.
اگه کاری ازم بر میاد بگو دریغ نمی کنم. ما هم مبتدی هستیم. بلکه چیزی یاد بگیریم.
از پست اولت شروع کردم به خوندن.
یه اشکال کوچیک هم دارم. من در همون مثال اول که گفته بودی فایل first بسازیم. اینکار را کردم ولی برنامه ای که نوشتم اجرا نمی شه.
این پیغام را می ده
The program 'first' is currently not installed.  You can install it by typing:
sudo apt-get install yagiuda
bash: first: command not found
اشکال چیه ؟
البته در یک فلدر دیگه ای(جدید) این کار را کردم. می تونه اشکال این باشه؟
یه سوال دیگه شما در همون پستهای اولیه ات گفته بودی :

نکته : تغییر دادن PATH به شکل فوق برای سوپر یوزر ویا همون root کار خیلی خطرناکته چون یک شکاف امنیتی محسوب میشه چون با اجرای یک دستور توسط root ممکنه که یک برنامه اشتباه و دروغین اجرا بشه!!!(حالا پس با کپی کردن یک اسکریپت با نام یکی از دستورات مشهور و پر استفاده شما میتونید هر کار ی رو در سیستم قربانی انجام بدین Silenced چون با دسترسی root قراره اجرا بشه)

حالا سوال من :چرا؟مگه مسیر جاری را در path قرار دادن اشکال داره و چطور می شه که این خطر پیش میاد
عنوان: پاسخ به: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 15 شهریور 1388، 02:44 ب‌ظ
اگه کاری ازم بر میاد بگو دریغ نمی کنم. ما هم مبتدی هستیم. بلکه چیزی یاد بگیریم.
از پست اولت شروع کردم به خوندن.
یه اشکال کوچیک هم دارم. من در همون مثال اول که گفته بودی فایل first بسازیم. اینکار را کردم ولی برنامه ای که نوشتم اجرا نمی شه.
این پیغام را می ده
The program 'first' is currently not installed.  You can install it by typing:
sudo apt-get install yagiuda
bash: first: command not found
اشکال چیه ؟
البته در یک فلدر دیگه ای(جدید) این کار را کردم. می تونه اشکال این باشه؟
یه سوال دیگه شما در همون پستهای اولیه ات گفته بودی :

نکته : تغییر دادن PATH به شکل فوق برای سوپر یوزر ویا همون root کار خیلی خطرناکته چون یک شکاف امنیتی محسوب میشه چون با اجرای یک دستور توسط root ممکنه که یک برنامه اشتباه و دروغین اجرا بشه!!!(حالا پس با کپی کردن یک اسکریپت با نام یکی از دستورات مشهور و پر استفاده شما میتونید هر کار ی رو در سیستم قربانی انجام بدین Silenced چون با دسترسی root قراره اجرا بشه)

حالا سوال من :چرا؟مگه مسیر جاری را در path قرار دادن اشکال داره و چطور می شه که این خطر پیش میاد

سلام دوست گلم
چرا کاری از دستت بر نمیاد
موقع خوندن ممکنه احساس کنی یه جایی از مطلب گنگه و یا اینکه جای دیگه ای چیری خوندی یا تجربه ای داری که فکر میکنی من جایی غلط نوشتم
اگه پست بزنی و این مطلب رو با من در میون بذاری باعث میشه که هم من چیزای جدید یاد بگیرم و هم این مجموعه به امید خدا کامل تر و بهتر بشه و بعدا بقیه دوستان راحتتر استفاده کنند(اگر بعدا بخام اینو pdf کنم چون تو pdf نمیشه مثل فروم سوال پرسید پس در اینجا باد همه سوال های ممکن پرسیده بشه و جوابش معلوم بشه)
همین سر زدن شما به این تاپیک و مطالعه اون و پرسیدن سوال و نظر دادن و اشکال وارد کردن به مثال ها و غیره بزرگترین لطفی هستش که میتونید به من بکنید

اما در باره ۲ سوال شما

در باره اجرا کردن فایل ها باید اینو بگم:
شما وقتی در ترمینال یک عبارتی رو تایپ می کنید-این عبارت یا دستوری که تایپ کردید یا دستوری هست که در زمانی که شل رو میساختند داخل اون وجود داشته ویا اینکه یک اسکریپت یا برنامه خارجی هست که شما دارید اجراش میکنید
به عنوان مثال برنامه nautilus رو در نظر بگیر.این برنامه یک برنامه جدای از shell هست.در بعضی از کامپیوتر ها ممکنه نصب نباشه و جود نداشته باشه و در بعضی مثل ubuntu وجود داشته باشه(nautilus اسم فایل منیجر شما هست)
وقتی از ترمینال تایپ میکنید nautilus . ترمینال این برنامه رو اجرا میکنه اما به نظر تو آدرس این برنامه رو ازکجا پیدا میکنه که اجراش کنه؟ ازکجا میدونه که کجا نصب شده؟
ویا حتی فکرکن این برنامه وجود نداشته باشه و نصب نباشه (مثل برنامه ای به نام first که شما نوشتید) از کجا میفهمه که نیست که پیغام میده (درست یا غلط ولی پیغام میده)
دلیلش همونیه که در پست اول گفتم.
وقتی nautilus رو تایپ میکنی شل در سیستم شما در آدرس های موجود در PATH (به بزرگی و کوچکی حروف دقت کنید)به دنبال اسکریپت یا برنامه ای به نام nautilus میگرده که حالا یا پیدا میکنه و یا پیدا نمیکنه.اگه پیدا کنه که اجراش میکنه ولی اگه پیدا نکنه پیغام میده که وجود نداره ۰بهتره اینجوری بخونیم که در آدرس های PATH وجود نداره)
به همین سادگی
لذا شل تمام سیستم رو به دنبال nautilus نمیگرده و فقط فولدر های خاصی رو میگرده
در سیستم شما فایل file در آدرس های موجود در PATH قرار نداشته (در زمان اجرای دستور) لذا با اون پیغام روبرو شدید
عبارت دات (.) در آدرس دهی در لینوکس به معنی آدرس دهی نسبی هست و عدم وجود دات (.) به معنی آدرس دهی مطلق
فرض کن که در PATH فقط مقدار /usr/bin/ وجود داشته باشه در این صورت با زدن دستور nautilus - این برنامه با آدرس مطلق زیر اجرا میشه
/usr/bin/nautilus
اما حالا فرض کن با ترمینال و با استفاده از دستور cd به فولدر خانگی خودت رفته باشی
(فولدر خانگی یعنی اگر اسم یوزر شما abcd باشه آدرس /home/abcd/)
در این حالت قصد داری وارد فولدر دسکتاپ خپدت بشی. هرکدوم از دو دستور زیر قابل قبوله فقط روش اول مطلق و روش دوم نسبی هستش
cd /home/abcd/Desktop
cd ./Desktop
خوب واضحه که در جاهایی که بشه از آدرس دهس نسبی استفاده کرد این کار بهتره و راحت تره
حالا به مثال های زیر دقت کن
وقتی که در متغیر PATH مقدار دات (.) وجود داشته باشه به این معنی  هست که (آدرس دهی نسبی و اشاره یه فولدر فعلی) برنامه های موجود در آدرس فعلی رو برای یافتن دستور مورد نظر جستجو و در صورت وجود اجرا کن.
ویا اگر این عبارت وجود نداره در PATH خوب شما برنامه رو با آدرس مطلق اجرا میکنی تا دیگه نیازی به چک شدن PATH توسط شل وجود نداشته باشه
یعنی اگر برنامه در آدرس جاری و فعلی قرار داره تایپ کن first/. که یعنی برنامه فرست رو از آدرس فعلی اجرا کن
حالا اگه آدرس مطلق برنامه first رو که به عنوان مثال در فولدری بهنام xyz در فولدر خانگیت وجود داره بخای وارد کنی و یا آدرس نسبی اون رو در حالی که خودت در فولدر خانگیت قرار داشته باشی باید یکی از دو عبارت زیر رو تایپ کنی
/home/abcd/xyz/first
./xyz/first
اگر هنوز جایی از این بحث گنگه لطفا بفرمایید تا بیشتر توضیح بدم
فقط یک نکته رو اضافه میکنم و اون اینکه عبارت ~ به معنی فولدر خانگی هست.یعنی برای شما ~ معادل است با /home/abcd/
پس در آخرین مثالمون میشه آدرس دهی مطلق رو به شکل زیر هم انجام داد
~/xyz/firstویا برای جابجا شدن به فولدر خانگی در ترمینال از دستور زیر استفاده کرد
cd ~


حالا سوال دوم
با توجه به اونچه که گفتم (PATH درسته و نه path) شما فرض کنید که چندین آدرس در این متغیر وجود داشته باشه
دستوری مثل دستور copy رو در نظر بگیرید
اگر این دستور با همین نام در بیش از یکی از این آدرس ها و مثلا در ۲ تا از این آدرس ها وجود داشته باشه.با زدن دستور copy شل یکی از اینها رو اجرا میکنه اما کدوم رو؟
در اینجا فرض کنید که یکی از این copy ها رو من وشته باشم و قصد خراب کردن سیستم شما رو داشته باشم
اسکریپت من علاوه بر اینکه عمل کپی رو انجام میده کارهای دیگری مثل نصب چند برنامه مخرب و backdoor ویا ارسال برنامه ها وفایل های شخصی شما رو برای من انجام بده
در این صورت وقتی که شما دستور cp رو اجرا میکنید با اینکه در ظاهر عمل کپی با موفقیت انجام میشه - سیستم شما مورد حمله قرار میگیره
پس تغییر دادن و یا اضافه کردم آدرس ها به PATH کار مهم و حساسیه
اگر شما به متغیر PATH مقدار دات (.) رو اضافه کرده باشید به این معنی هست که شل در هنگام اجرای یک دستور باید فولدر جاری رو نیز به دنبال اون دستور جستجوکنه
حالا احتمال خطر بیشتره!
چون من ممکنه به همه فولدر ها دسترسی نداشته باشم که اسکریپت های مخربم رو برروی اونها کپی کنم اما به بعضی ها دسترسی خواهم داشت و این احتمال وجود داره که شما به صورت ناخواسته این اسکریپت رو اجراکنید

تغییر دادن متغیر های محلی و مجوز ها و سطوح دسترسی به صورت کلی کار حساسی هست و بر روی امنیت سیستم اثر مستقیم میذاره. یک مدیر امنیت باید فردی باهوش باشه و در مقابل اون هکر ها آدم هایی زیرک تر وباهوش ترند (البته من کلاه سفید ها رو بیشتر از کلاه سیاه ها دوست دارم)
من یک یوزر سادم و کلاه سفید نیستم اما کلاه سفید هارو دوست دارم  ;)

اگه سوالی هست بازم در خدمتم

یا علی
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 15 شهریور 1388، 07:16 ب‌ظ
هر وقت تکنوتاکس درست شد، یه سری به این لینک بزنید:
http://www.technotux.org/html/PNphpBB2-viewtopic-t-13341.html
در رابطه با همین PATH و دایرکتوری جاری(.) و مسائل امنیتی هست.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: firethumbs در 15 شهریور 1388، 07:31 ب‌ظ
خیلی چاکریییییییییییییییییییییییییم
این حاصل فرمان ال اس من است
drwxr-xr-x  2 sniper sniper 4096 2009-09-06 19:17 .
drwxr-xr-x 77 sniper sniper 4096 2009-09-06 19:14 ..
-rwxrwxrwx  1 sniper sniper  149 2009-09-05 19:22 first
-rw-r--r--  1 sniper sniper    0 2009-09-06 13:03 kill micro$oft's office
-rw-r--r--  1 sniper sniper    0 2009-09-05 19:17 mydata
-rw-r--r--  1 sniper sniper    0 2009-09-05 18:57 one
-rw-r--r--  1 sniper sniper  113 2009-09-05 19:16 psout
-rw-r--r--  1 sniper sniper   84 2009-09-05 19:15 psout1
-rw-r--r--  1 sniper sniper    0 2009-09-05 18:57 three
-rw-r--r--  1 sniper sniper    0 2009-09-05 18:57 two

اقا من فایل را به این صورت اجرا می کنم
./ttt/first
ttt فلدری است که در پوشه خانگی من قرار داره. بعد این خروجی را می گیریم
grep: Unsaved: No such file or directory
grep: Document: No such file or directory
grep: 1: No such file or directory
first
first~
داخل فلدر ttt هم که می روم و فایل را به این صورت اجرا می کنم
 ./first
این خروجی را دارم:
first
grep: kill: No such file or directory
grep: micro$oft's: No such file or directory
grep: office: No such file or directory


سوال دوم
چرا ادرس دهی نسبی بهتر از مطلق است.؟
backdoor چیه؟
سوال بعدی
من در یک مقاله خوندم که وقتی فرمانی را اجرا می کنی اول فلدری برای آن فرمان جستجو می شود که در PATH اول باشد. پس جای نگرانی نیست چون وقتی شما (.) را به مسیر اضافه می کنی نقطه در آخر مسیر قرار می گیرد و اگه به قول شما کسی فرمان کپی را اجرا کند مسیرهای قبلی اجازه اجرای آن را ندارند و فرمان کپی که در مسیر قبل از (.) قرار دارد اجرا میشود
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 15 شهریور 1388، 11:24 ب‌ظ
سلام
آدرسی که ilius جان دادند هم خیلی جالبه و سالم هم هست (مگه تکنوتاکس برای شما قطعه ilius جان؟)

به هرحال جواب سوال های شما دوست محترم (در حد سواد من)

من متن شما رو کامل خوندم اما همچین چیزی به نظرم امکان نداره! نمیدونم چی شده چون مجوز های شما کاملا درسته پس فکرکنم شاید مشکل تایپی ای چیزی باشه
دستور زیر رو لطفا یک بار دیگه تایپ کنید و دقتکنید که هیچ فاصله ای وجود نداره - برای اطمینان نصف کلمه first رو که نوشتید با زدن کلید tab اون رو کامل کنید. اگر اشتباه دستوری یا املایی یا تایپی باشه دیگه دکمه tab متن رو کامل نمیکنه
~/ttt/first
اگه بازم کار نکرد دیگه سواد من قد نمیده!



آدرس دهی نسبی بهتر یا بدتر نیست و فقط دو روش آدرس دهی هستند. آدرس دهی نسبی به نظر من دو نکته داره
۱ - راحت تره
۲ - در اسکریپت نویسی بیشتر کاربرد داره چون معمولا شما قصد دارید اسکریپتتون در محل و ادرس فعلی (یعنی دات (.)) اجرا بشه

وقتی یک هکر قصد نفوذ رو داشته باشه گاهی اوقات از یک سری برنامه هایی که بروی سیستم شما هستند استفاده میکنه تا کارش راحت بشه و یا گاهی بعد از طی کردن مراحل و روش های دیگه هک و هک کردن سیستم شما برای اینکه از این به بعد راحت تر به سیستم شما دسترسی پیدا کنه و دیگه این دشواری ها رو تحمل نکنه یک سری برنامه روی سیستم شما نصب میکنه که در واقع این برنامه (که هکر نصب کرده ویا اینکه برنامه ای غیر مطمئن که خودتدن نصب کردید) به سیستم شما و مراحل امنیتی موجود روی اون خیانت میکنه و هکر میتونه تمام سیستم های امنیتی موجود روی سیستم شما رو دور بزنه.
مثل در پشتی خونه که یک دزد خودش برای خونه شما ساخته باشه ولذا کلیدش رو هم داره
هرچقدر شما امنیت برای درب جلو خونه بذارید فایده نداره چون اون به راحتی و از در پشتی وارد خواهد شد!


بله دقیقا فرمایش شما و اونی که مطاله کردید صحیح و درسته. ترتیب آدرس ها در PATH اهمیت داره اما اونی که من گفتم یک مثال بود برای اینکه اهمیت تغییر دادن متغیر های محلی و مجوزهای دسترسی معلوم بشه.با تغییر متغیر های موجود و یا مجوز ها ممکنه که کار رو برای یک کلاه سیاه سخت تر و یا ساده تر کنید. به هر حال هر قدمی در زمینه امنیت باید قدمی آگاهانه و از روی تفکر باشه و تست شرایط بر روی یک سیستم واقعی که اطلاعات مهمی هم بر روی خود داره کار درستی نیست و خطر ناکه
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 17 شهریور 1388، 07:36 ب‌ظ
منتظر جواب دوست عزیز و جدیدمون (firethumbs )‌شدیم اماایشون نیومدند!
امید وارم که مشکلشون حل شده باشه

اما با انگیزا ای مضاعف قصد دارم آموزش رو ادامه بدم

دلیل این انگیزه اینه که هر بار پروژه موفقی مثل star calender رو میبینم - به خودم میگم چرا من نباید یکی از این برنامه نویس ها باشم و در این پروژه ها یا پروژه های دیگه به دوستای عزیزم کمک کنم

چرا شما نباید یکی از این برنامه نویسا باشید!به امید روزی که تعداد برنامه نویس های ایرانی و کیفیت کارشون در لینوکس آنقدر عالی و زیاد بشه که کمبودی در این زمینه احساس نشه و نام لینوکس در سرتاسر کشور عزیزمون بپیچه (دیگه کسی نپرسه که این لینوکسی که میگین چیه؟ مثل ورد میمونه یا اینکه شبیه winrare!!!)


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

exit n

این دستور باعث پایان یافتن اسکریپت با کد n میشه!
به صورت عادی اگر از این دستور استفاده نکنید پس از اجرای آخرین خط دستورات در اسکریپت - اسکریپت بسته میشه! و البته این خطو بهتر بگم مقدار این خط به عنوان خروجی استفاده میشه (return) منظور من در خطوط زیر بهتر درک خواهد شد!

اگر از دستور exit در کامند پرامپت در شل استفاده کنید باعث logout شدن شما میشه
اسکریپت هایی که موفق اجرابشن کد خروج اونها ۰ هستش (معمولا) و کد های ۱ تا ۱۲۵ برای خطا ها استفاده میشه که اسکریپت ها قادر هستند از این مقادیر برای خودشون استفاده کنند

خروج ۱۲۶ به این معنی هستش که فایل قابلیت اجرا رو نداره یا به عبارتی executeable نیست

۱۲۷ یعنی دستور پیدا نشد یا command is not found

۱۲۸ به بالا به معنی رخ دادن یک سیگنال یا event هستش

Exit Code | Description
____________________________________________________
126 | The file was not executable.
127 | A command was not found.
128 and above | A signal occurred.

استفاده از ۰ به عنوان خروج موفقیت آمیز ممکنه در مقایسه با بسیاری برنامه های C و C++ کمی غیر معمول باشه.نکته مهم اینه که در اسکریپت نویسی کد های خطای ۱ تا ۱۲۵ در اختیار ما قرار داره بدون اینکه نیازی به استفاده یا ایجاد متغیر های ارور جهانی (global error code variable) داشته باشیم

در زیر یک نمونه کد رو میبینید که خروجی موفقیت آمیز رو میفرسته در صورتی که فایلی به نام .ptofile وجود داشته باشه
#!/bin/sh
if [ -f .profile ]; then
    exit 0
fi
exit 1

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

کل کد فوق در خط زیر خلاصه شده
[ -f .profile ] && exit 0 || exit 1
چرا ؟

جواب :
دستور اول که برای چک کردن وجود یا عدم وجود فایل هست دو حالت داره
۱- موفق باشه با مقدار true
۲- ناموفق باشه با خروجی false

در حالت دوم نیازی به چک کردن دستور && نیست (به دلایلی که در پست های قبلی گفتم) ولذا مسقیم به سر دستور بعد از || میره پس خروج با کد ۱ (خطا) صورت میگیره اما در حالت اول حتما باید دستور بعد از && چک بشه و چون این دستور exit هست لذا بعد از خروج با کد ۰ (موفقیت آمیز) مجالی برای چک کردن یا نکردن ادامه اسکریپت پ درواقع کد بعد از || باقی نمیمونه

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

export
به صورت عادی متغیر هایی که داریم در جاهای دیگه قابل رویت و دسترسی نیستند
این دستور محیطی را با متغیر های ما ایجاد میکند که متغیر ها در اسکریپت های دیگر قابل دسترسی باشند
در واقع این دستور متغیر ها رو مجبور میکنه که مثل پارامتر های اسکریپت در ساب شل ها (subshells) در دسترس باشند

این بحث رو با دو اسکریپت export1 و export2 شرح میدم

export2
#!/bin/sh
echo “$foo”
echo “$bar”

export1
#!/bin/sh
foo=”The first meta-syntactic variable”
export bar=”The second meta-syntactic variable”
export2

همونجوری که مشاهده میکنید در خط آخر export1 اسکریپت export2 اجرا و فراخوانی شده
حالا export1 رو اجرا میکنیم
$ export1
The second meta-syntactic variable
$

جالب بود نه؟  ;D

خوب به میانه راه اسکریپت نویسی رسیدیم
به خودم و به شما تبریک میگم
فردا صبح بقیشو دنبال خواهیم کرد (expr , printf , retuen , set , shift , trap , ....)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 18 شهریور 1388، 09:19 ب‌ظ
سلام
وقتی یک متغیر رو export کنم از اون به بعد تمام اسکریپت هایی که از شل اجرا بشن و فراخوانی بشن در دسترس هستند.یعنی اگر در داخل export2 اسکریپت دیگه ای هم فراخوانی و اجرا میشد - اون اسکریپت هم به متغیر bar دسترسی داشت درست مثل export2
اگر قصد داشتید که تمام متغیر ها رو اکسپرت کنید میتونید از یکی از دو دستور زیر استفاده کنید
set -a
set -allexport

expr
این دستور با آرگومانش به صورت یک عبارت (expression) برخورد میکنه
معمولا این دستور در فرم ها و کاربرد هایی مانند زیر استفاده میشه (البته این یک مثال ساده هست)
x=`expr $x+1`دقت داشته باشید که کاراکتر استفاده شده در دو سمت عبارت بعد از مساوی back-tick هست!
این علامت باعث میشه تا x مقدار و نیجه کل عبارت داخل این علامت رو به خودش اختصاص بده
البته میشه بجای استفاده از back-tick از شکل $() استفاده کرد (که مشابه اون رو در مثال های قبلی دیدید) و با این جایگزینی به شکل زیر در میاد
x=$(expr $x+1)
این دستور خیلی قدرتمنده و بسیاری از عبارات را ارزیابی و تفسیر میکنه
قواعد اصلی و کی رو در جدول زیر آوردم
Expression Evaluation | Description
___________________________________________________________________________________
expr1 | expr2 | expr1 if expr1 is nonzero, otherwise expr2
expr1 & expr2 | Zero if either expression is zero, otherwise expr1
expr1 = expr2 | Equal
expr1 > expr2 | Greater than
expr1 >= expr2 | Greater than or equal to
expr1 < expr2 | Less than
expr1 <= expr2 | Less than or equal to
expr1 != expr2 | Not equal
expr1 + expr2 | Addition
expr1 - expr2 | Subtraction
expr1 * expr2 | Multiplication
expr1 / expr2 | Integer division
expr1 % expr2 | Integer modulo

در اسکریپت های جدید تر معمولا دستور expr با علامت $((...)) جایگزین میشه  ;)
این علامت رو قبلا در مثال ها دیده بودید. اینم معنیش  ;D
البته بحث کاملتر در باره این علامت رو به آینده نه چندان دور میسپارم

printf
این دستور تنها در شل های نسبتا جدید وجود داره
متن زیر رو تنها یک نقل قوله :
نقل‌قول
                                                   X/Open suggests that we should use it in
preference to echo for generating formatted output.

فرمت این دستور :
printf “format string” parameter1 parameter2 ...
format string خیلی برای برنامه نویسان C و C++ آشناست البته با چند محدودیت و تغییر کوچک
floting point پشتیبانی نمیشه!
دلیل ایم امر هم واضحه چون تمام مقادیر عددی داخل شل به عنوان اینتیجر (اعداد حسابی) عمل میکنن
Escape Sequence | Description
__________________________________________________________________
\\ | Backslash character
\a | Alert (ring the bell or beep)
\b | Backspace character
\f | Form feed character
\n | Newline character
\r | Carriage return
\t | Tab character
\v | Vertical tab character
\ooo | The single character with octal value ooo

مبدل های تسریح (conversion specifier) کمی پیچیده هستند و لذا در جدول زیر تنها انواع معمول و پر کاربرد اونها رو خواهم آورد
موبدل های تسریح همگی شامل کاراکتر % میشن. برای اطلاعات بیشتر به منوال آنلاین بش bash online manual مراجعه کنید
Conversion Specifier | Description
________________________________________________________
d | Output a decimal number.
c | Output a character.
s | Output a string.
% | Output the % character.

format string برای تفسیر پارامتر های باقی مانده و فرمت کردن خروجی استفاده میشه بهمثال زیر توجه کنید
printf "%s\n" hello
hello
printf "%s %d\t%s" "Hi There" 15 People
Hi There 15 people

 در آخر لازم به استفاده از " در مثال آخر توجهتون رو جلب کنم که وجود اون لازمه تا عبارت Hi There به عنوان یک آرگومان عمل کنه و تفسیر بشه

return
با این دستور قبلا آشنا شدیم و بعدا هم بیشتر در باره اون صحبت خواهیم کرد
دستور آسونیه و توضیح زیادی نداره
این دستور خروجی یک تابع یا اسکریپت رو مشخص میکنه که این دستور به عنوان آرگومان تنها میتونه یک مقدار عددی داشته باشه و مقدار خروجی تابع با این دستور تنها در جایی که این تابع رو صدا زدیم قابل دسترسی هست.
اگه از این دستور استفاده نکنیم خروجی اسکریپت مقدار خروجی آخرین دستور اجرا شده در اسکریپت خواهد بود!
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 12:32 ب‌ظ
سلام
من دستور if شما رو عینا کپی کردم ولی چرا

#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday

if [$timeofday = "yes" ]; then
   echo "Good morning"
else
   echo "Good afternoon"
fi

exit 0

hamid@hamid-desktop:~/Desktop/Learn$ /bin/sh First
Is it morning? Please answer yes or no
yes
First: 10: [yes: not found
Good afternoon
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 19 شهریور 1388، 01:14 ب‌ظ
سلام عزیز
کد شما (کد سابق من) یک مشکل خیلی کوچیک داره
شما یک space رو قبل از دالرساین جا انداختید (کد زیر کد شماست)
if [$timeofday = "yes" ]; then
این کد رو امتحان کنید(امید وارم که جواب بده)
if [ $timeofday = "yes" ]; then
تنها تفاوت دو کد بالا وجود یم space قبل از دالر یاسن dollar sign هستش

دلیلش هم اینه که کاراکتر ] در واقع میتونه به معنی test باشه و وجود یا عدم وجود یم فایل رو چک کنه

برنامه شما به دنبال یک فایل میگرده که پیداش نمیکنه و لذا خروجی اون false هستش وبه همین دلیل هم وارد قسمت else میشه

با تشکر فروان از اینکه این مشکل رو فرمودید در کر اصلی درستش کردم.اگه بازم به ارروری برخورد کردید لطفا حتما امر بفرمایید تا درستش کنم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 02:33 ب‌ظ
خیلی خیلی ممنون
حل شد  \\:D/
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 02:48 ب‌ظ
راستی اگر امکانش هست دوستانی که در زمینه برنامه نویسی تجربه دارن یه دیسک شبیه دیسک هما ایجا کنن تا کسایی که سرعت اینترنتشون پایین هست بتونن ازش استفاده کنن
من خودم به خاطر سرعت پایین تاحالا نتونستم در اوبونتو برنامه نویسی کنم

ممنون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 19 شهریور 1388، 03:20 ب‌ظ
راستی اگر امکانش هست دوستانی که در زمینه برنامه نویسی تجربه دارن یه دیسک شبیه دیسک هما ایجا کنن تا کسایی که سرعت اینترنتشون پایین هست بتونن ازش استفاده کنن
من خودم به خاطر سرعت پایین تاحالا نتونستم در اوبونتو برنامه نویسی کنم

ممنون

ببخشید میشه لطفا بیشتر توضیح بدید؟
IDE های برنامه نویسی رو میخاین یا آموزشش رو؟

هرکدوم رو میخاین بگین تا در روز جشن تقدیم کنم (البته قبلش بگید که باخودم بیارم)
در صورت لزوم خودم ساختش رو بر عهدا میگیرم ولی باید بیشتر شرح بدید که چی میخاین
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 03:43 ب‌ظ
راستی اگر امکانش هست دوستانی که در زمینه برنامه نویسی تجربه دارن یه دیسک شبیه دیسک هما ایجا کنن تا کسایی که سرعت اینترنتشون پایین هست بتونن ازش استفاده کنن
من خودم به خاطر سرعت پایین تاحالا نتونستم در اوبونتو برنامه نویسی کنم

ممنون

ببخشید میشه لطفا بیشتر توضیح بدید؟
IDE های برنامه نویسی رو میخاین یا آموزشش رو؟

هرکدوم رو میخاین بگین تا در روز جشن تقدیم کنم (البته قبلش بگید که باخودم بیارم)
در صورت لزوم خودم ساختش رو بر عهدا میگیرم ولی باید بیشتر شرح بدید که چی میخاین

خب سادس
توی ایران اغلب مردم به اینترنت سرعت بالا دسترسی ندارن (فکرش رو بکن در بین حدود ۲۰۰ کشور ۱۸۶ هستیم) به همین علت
۱-باعث کاهش افراد جذب شده به لینوکس میشه
۲-افرادی هم که جذب میشن به همون علت بالایی دوباره میرن سراغ ویندوز (خب برنامه هاشون رو میتونن از طریق بانک های نرم افزاری بدست بیارن)

منم برنامه نویسی رو خیلی دوست دارم در مقابلش ولی قبض اخر هر دوره تلفن رو هم اصلا دوست ندارم
چون من توی یه روستا زندگی میکنم داشتن ADSL برام یه رویا هست و بس
با dialup هم که نمیشه ۳۰۰ م.ب رو دانلود کرد
پس برنامه نویسی ..............................................................  ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)

پس اگر یه چیزی مثل دیسک هما برای برنامه نویسی وجود داشت خیلی خیلی عالی میشد
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 19 شهریور 1388، 05:50 ب‌ظ
برادر من سلام
میدونم دایال آپ چیه عزیز جان
منظورم اینه که IDE ها رو میخای برات رایت کنم یا آموزش رو .....
اگه IDE یا آموزش رو میخای بگو برای چه نرم افزار یا زبونی رو
اگه اسم سایت رو هم بدی کل سایت رو برات دانلود و میرور میکنم.

اینارم ببین
http://www.sito.ir/index.php?cPath=151&osCsid=d34b9f7c4294613086e4bdd046c464cf
http://www.sito.ir/index.php?cPath=53&osCsid=d34b9f7c4294613086e4bdd046c464cf

------------------------------------------------------------------------------

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

بزارین یک مثال بزنم
من تهرانم و مثلا باید قیمت ها از همه جا پایین تر باشه!!! فقط سرویس پک خالی ویژوال استودیو ۲۰۰۸ و بدون خود برنامه - حجمش ۷۴۵ مگابایته
برای من که ADSL دارم دالودش با توجه به هزینه رایت و پول اینترنت و برق و غیره ۱۰۰۰ تومن در میاد (با اینترنت خانگی و بدون سر شکن شدن قیمت نهایی روی هزاران نسخه)
اما بعضی شرکت ها که اسمشون رو نمیبرم الان دارن این نرم افزار رایگان رو‌ (از سایت ماکروسافت میشه رایگان دانلود کرد) نسخه ای ۱۰۰۰۰ تومن (درست دیدی ده هزار تومن) میفروشن
تو همین تهران و مرکز خرید سی دی و نه دست فروش.!!! حالا اگه یک مقایسه ساده با محص.لات لینوکس شاپ و سیتو بکنید میبینید که این بنده خدا ها وقت و انرژی و ... میذارن اما دارن مفت این سی دی هارو به ما میدن
اگه یه مغازه داشته باشن تو یه پاساژ شک نکنید که حتی ۱ کاربر ویندوز هم تو ایران باقی نمیمونه  :o
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 06:54 ب‌ظ
سلام
امیدوارم از دست من ناراحت نشده باشید
من به صورت یک دید کلی دارم به این بحث نگاه میکنم

ترجیح میدم که برنامه های linux application انجام بدم
هنوز در مورد ide تصمیم نگرفتم

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

توی ویندوز من C# رو مسلتم (به خیال خودم )
از لحاظ ساختاری هم که به c,c++,java شبیه هست

اما چون اینترنت درست و حسابی ندارم حتی فکر برنامه نویسی برای لینوکس رو هم نکردم (مگر یه دفعه به کمک دوست عزیزم ارماگدون (امیدوارم که طبق معمول اسم کاربریشون رو اشتباه ننوشته باشم) که لطف کردن و ide نت بینز رو برام فرستادند)

حالا من با چند تا دوست خوب دلسوز مثل شما و ارماگدون و... اشنا شدم و .....
اما بقیه که تازه واردن و هز dilup استفاده میکنن چی ؟؟؟؟؟
مجبورن دست به دامن اینترنت بشن که با dialup غیر ممکنه

در مورد قیمت ها
خب شما چیزی به نام ADSL دارید که متعاقبا باعث کاهش هزینه ها میشه اما این هزینه ها و قیمت ها در مورد dialup هم صادقه
مسلما اگر من هم میخواستم برنامه نویسی کنم و dialup داشتم میرفتم (به اجبار) و دیسک ویژوال استودیو را تهیه میکردم

خب حالا اگه بیاییم و همه IDE های موجود برای برنامه نویسی توی لینوکس رو توی ۱ شایدم ۲ تا dvd اماده کنیم (مثل هما) بد نیست که
مطمعنم که استقبال خوبی هم ازش میشه
به گفته خودتون

حالا اگه یک مقایسه ساده با محص.لات لینوکس شاپ و سیتو بکنید میبینید که این بنده خدا ها وقت و انرژی و ... میذارن اما دارن مفت این سی دی هارو به ما میدن
در مورد حرف اخرتون هم که ۱۰۰ ٪ با شما موافقم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 19 شهریور 1388، 08:12 ب‌ظ
سلام عزیز جون
چرا باید ناراحت بشم - خیلی هم خوشحال شدم

چشم

سعی میکنم مجموعه IDE های معروف رو برای لینوکس آماده کنم و در اختیار دوستان خوبمون در لینوکس شاپ و سیتو قرار بدم برای فروش در سراسر کشور
اما این پروژه زمان بره!! ولی سعی خودم رو خواهم کرد که سریع تر آماده کنمش
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 19 شهریور 1388، 09:36 ب‌ظ
سلام عزیز جون
چرا باید ناراحت بشم - خیلی هم خوشحال شدم

چشم

سعی میکنم مجموعه IDE های معروف رو برای لینوکس آماده کنم و در اختیار دوستان خوبمون در لینوکس شاپ و سیتو قرار بدم برای فروش در سراسر کشور
اما این پروژه زمان بره!! ولی سعی خودم رو خواهم کرد که سریع تر آماده کنمش

از ما که گذشت هیچ کس بهمون نگفت ............................  ;)

خیلی خوبه
منتظریم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 23 شهریور 1388، 02:01 ب‌ظ
سلام
ببخشید که دیر پست میدم
سیستمم ترکیده بود :D

دوم اینکه یکم خستم و امروز هم پست نمیدم  ](*,) (بازم ببخشید) ایشالا از فردا شروع میکنم

فقط میخام یک مطلبی رو به رای بگذارم تا فردا:

یکی از دوستان آموزش QT رو شروع کردند
یکم سطحش برا من بالا بود
اگه موافق باشید یکم سریع تر آموزش بدیم (حذفی ها رو زیاد کنم) و با پرش بریم جلو تا به ایشون برسیم و مقدمات بحث ایشون ور با هم بخونیم
هر وقت سر یک موضوع گیر کردیم برگردیم و اون مقدمات رو بخونیم
واگه خدا بخاد و مقدمات ایشون رو تموم کنم و بهشون برسیم موازی با ایشون GTK رو بخونیم

به نظرم این کار بهتر از اینه که اینقدر مثل الان کلاسیک جلوبریم و کامل و قدم به قدم

به نظرم روش فعلی یکم خسته کننده شده


حلا نظرتون رو لطفا بگید
۱)همین روش رو ادامه بدم و قدم به قدم و کامل
۲)مقدمات برنامه نویسی در محیط های گرافیکی رو شروع کنم
۳)مستقیم بریم سروقت GTK
۴)هر نظر دیگه ای که دارید بفرمایید

در صورتی که کسی جواب نده من گزینه ۲ رو شروع میکنم

رای خودم هم به عنوان ۱ نفر گزینه ۲ هست
(پس تاحالا گزینه ۲ یک رای و بقیه صفر  ;) )
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: OpenS در 23 شهریور 1388، 02:28 ب‌ظ
گزينه 2 عزيزم \\:D/
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: HamidTB در 23 شهریور 1388، 11:12 ب‌ظ
منم این ۲ رو دوست دارم خیلی زیاد
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: Freeman در 23 شهریور 1388، 11:47 ب‌ظ
سلام تشکر از سید محمود و ایلیوس و دیگر دوستان

همون اموزش پایه های برنامه نویسی گرافیکی (2 ) عالیه و احتمالا بعدش برنامه نویسی گرافیکی برای GTK و Qt

موفق باشی
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 24 شهریور 1388، 12:23 ق‌ظ
 سلام
رای گیری به پایان رسید و پس از شمارش تعداد زیادی رای بررسی های دشوار و پیچیده دریافتیم که گزینه ۲ با اکثریت آرا تصویب میشه  :P

 \\:D/

خوب پس از صبح (یعنی ۶ ساعت دیگه) اموزش اولینبرنامه گرافیکی خودم رو شروع میکنم
اول اینو بگم که زیاد گرافیکی نیستا (گرافیکش کمه)

فعلا برای اینکه یکم از سلیقه من در زمینه گرافیک سر در بیارید وارد ترمینال بشید و بنویسید
aptitude
بدون هیچ آرگومانی

اونوقت یک محیط زیبای گرافیکی رو میبینید  ;)

سروع ما با یک چیزی مثل این خواهد بود

---------------ویرایش-----------------
راستی یادم رفت بگم
heresh جان به من قول کمک دادند و ایشالا به زودی شاهد تولد یک بلاگ و بعد از اون اولین نسخه آموزش برنامه نویسی در لینوکس خواهید بود

خدا رو چه دیدید شاید یک سایت بزرگ و جامع شد  :o
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: OpenS در 24 شهریور 1388، 01:29 ق‌ظ
سید جان ما منتظر پیشرفتت نشستیم عزیزم \\:D/

انشاالله بشه بزرگترین سایت دنیا
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 24 شهریور 1388، 04:27 ق‌ظ
‌‌‌.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: heresh در 24 شهریور 1388، 08:38 ق‌ظ
سلام
از دوستان گرامی درخواست می‌کنم از این به بعد فقط پستهای مربوط به آموزش برنامه نویسی و هماهنگ با روند آموزش رو قرار بدن.
اگر کسی قصد تشکر، ارائه پیشهاد، تذکر مطلبی یا سوالی رو داره بصورت خصوصی برای آقای سجادی بفرسته.
پیشاپیش از همه دوستان ممنون.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 24 شهریور 1388، 03:05 ب‌ظ
سلام
از دوستان گرامی درخواست می‌کنم از این به بعد فقط پستهای مربوط به آموزش برنامه نویسی و هماهنگ با روند آموزش رو قرار بدن.
اگر کسی قصد تشکر، ارائه پیشهاد، تذکر مطلبی یا سوالی رو داره بصورت خصوصی برای آقای سجادی بفرسته.
پیشاپیش از همه دوستان ممنون.

بازم سلام
این نکته ای که آقای heresh جان عزیز فرمودند خیلی مهمه و از تمامی دوستان در این باره تشکر میکنم چون قراره ایشالا اینجا برای دوستان آینده ما که نوز به این فروم سر نزدند یا برنامه نویسی رو شروع نکردند مجموعخ منظمی ساخته بشه و راحت بتونند دنبال کنند!
قبل از شروع بحث جدید از تمام دوستانی که با نظرات زیبا و بجای خودشون ما رو در انتخاب راه آموزش یاری کردند و در این رای گیری نظر خواهی شرکت کردند تشکر میکنم
و در آخر ilius جان چرا سالی یه بار به این تاپیک سز میزنی عزیز. ما منتظریما.... شما هم پست بزنی ممنون میشیم (و البته دیگر اساتید)

جاهایی که توضیح نمیدم و دستوراتی رو که از روشون میپرم تا زودتر بتونیم بحث مقدماب برنامه نویسی گرافیکی و gtk رو شروع کنیم رو براتون مینویسم تا اگه کسه خاست خودش پیگیری کنه
set - shift - trap - unset - grep - Regular expressions - command execution - parameter exception - Here Documents! - Debugging Script -

البته در باره دیباگ کردن همین الان یه کچولو میگم
معمولا نباید با دیباگ کردن اسکریپت هاتون مشکل خاصی داشته باشید ولی همونجوری که میدونید ابزار خاص و یکپارچه ای برای کمک به شما در این زمینه هم وجود نداره.لذا در اینجا باهم روش های دستوری رو یک مرور کلی میکنیم
به صورت عادی هنگامی که یک خطا رخ میده شل باید شماره خط و یک سری توضیحات رو چاپ کنه
اگه به هردلیلی شل اطلاعات لازم رو در اختیار ما نگذاشت یا کامل نبود میشه با اضافه کردن چنتا echo به کدمون خروجی ها و متغیر ها رو چک کنیم و یا دستورات رو مستقیما در ترمینال وارد کنیم و خط به خط برنامه یا بخشی از اون رو اجرا کنیم
برای trace کردن خطا های پیچیده و دشوار میشه آپشن های گوناگونی رو در شل ست کرد. برای اینکار شما میتونید از دستور set استفاده کنید ویا از command line بعد از اجرا کردن و صدا زدن اسکریپتتون بهره ببرید
و حالا لیستی از دستورات
Command Line Option | set Option | Description
=========================================================================================
sh -n <script> | set -o noexec | Checks for syntax errors only;
                    | set -n | doesn’t execute commands.
_________________________________________________________________________________________
sh -v <script> | set -o verbose | Echoes commands before
| set -v | running them.
_________________________________________________________________________________________
sh -x <script> | set -o xtrace | Echoes commands after processing
| set -x | on the command line.
_________________________________________________________________________________________
| set -o nounset | Gives an error message when an
| set -u | undefined variable is used.

شما میتونید با آرگومان -o فلگ ها یا پرچم ها رو روشن کنید و با دستور +o اونها رو خاموش کنید
راه ساده استفاده و اجرا کردن trace هم استفاده از  آپشن xtrace هست
دستور زیر xtrace رو فعال میکنه
set -o xtraceو دستور زیر اون رو خاموش یا غیر فعال میکنه
set +o xtraceموقعیت exit رو هم میشه به سادگی با خطی مانند خط زیر در شل پیدا کرد که در اون exit یا سیگنال exit رو به تله انداختیم (trap) و البته معلومه که این خط حتما باید در ابتدای اسکریپت شما قرار داشته باشه!
trap 'echo Exiting: critical variable = $critical_variable' EXITامید وارم این افزایش سرعت ناگهانی من در آموزش شما رو به دردسر نندازه و بتونید دنبال کنید این تاپیک رو
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 24 شهریور 1388، 03:23 ب‌ظ
Going Graphical - The Dialog Utility
خوب شروع میکنیم با نام و یاد خدای بزرگ
اگر اسکریپت شما قراره فقط در لینوکس اجرا بشه شما این توانایی رو دارید که از یک utility به نام dialog استفاده کنید
dialog یک چیز زیبا و جمع و جوره با تعداد زیادی از متغیر ها و آرگومان ها و پارامتر ها برای ایجاد و استفاده از دیالگ های زیبا و کارآمد در برنامه هاتون
خوب دوستان طبق روش کلی من و سلیقه من (اینجا از دمکراسی خبری نیست  ;) ) اولین دیالوگ رو برای سادگی بیشتر بدون استفاده از اسکریپت و فقط با تایپ یک جمله کوتاه در ترمینال میسازیم

dialog --msgbox "hello World" 9 18این hello world هم برای خودش چیزی شده ها. نمیدونم چرا اگه اولین برنامم این نباشه هیچی یاد نمیگیرم  ???

خوب ادامه میدیم

قشنگ بود؟
پارامتر های ساده ای داره
خودتون پارامتر هارو تغییر بدید و با توجه به تغییراتی که صورت میگیره سعی کنید از کار اونها سر در بیارید
اببته مثل همیشه بازم میشه از man dialog استفاده کرد!
نکته دیگه اینکه یک بار هم از موس برای کلیک روی ok استفاده کنید! آیا کار میکنه یا فقط با کیبرد کار میکنه؟

Type | Option Used to | Meaning
| Create Type |
=================================================================================================================
Check boxes | --checklist | Allows you to display a list of items, each of which
| | may be individually selected.
-----------------------------------------------------------------------------------------------------------------                                    
Info boxes | --infobox | A simple display in a box that returns immediately,
| | without clearing the screen.
-----------------------------------------------------------------------------------------------------------------
Input boxes | --inputbox | Allows the user to type in text.
-----------------------------------------------------------------------------------------------------------------
Menu boxes | --menu | Allow the user to pick a single item from a list.
-----------------------------------------------------------------------------------------------------------------
Message boxes | --msgbox | Displays a message to the user with an OK button
| | when they wish to continue.
-----------------------------------------------------------------------------------------------------------------
Radio selection boxes | --radiolist | Allows the user to select an option from a list.
-----------------------------------------------------------------------------------------------------------------
Text boxes | --textbox | Allows you to display a file in a scrolling box.
-----------------------------------------------------------------------------------------------------------------                      
Yes/No boxes | --yesno | Allows you to ask a question, to which the user
| | can select either yes or no.

بقیه باشه برای بعدا ایشالا
فعلا یا علی
خدا پشت و پناهتون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 24 شهریور 1388، 06:42 ب‌ظ
دستور zenity رو هم می‌خواید بگید دیگه؟
همینطور xmessage (البته این از فارسی پشتیبانی نمیکنه!)
یه دستوری هم هست به اسم gdialog
اما من از وقتی PyGTK یاد گرفتم، با هیچکدوم اینا کاری ندارم! ;)
نوشتن یه اسکریپت کوچیک با PyGTK و PyQt خیلی انعطاف‌پذیرتر هست، مخصوصاً برای برنامه‌نویس‌هایی که همیشه با GTK یا Qt سروکار دارن (مثل من حتی برای برنامه‌های خیلی کوچیک هم ترجیه میدم از PyGTK استفاده کنم، چون اوپشن‌های اون دستورات مثل zenity یادم میره ولی PyGTK هیچ‌وقت یادم نمیره)
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 24 شهریور 1388، 07:20 ب‌ظ
سلام

ilius جان اگه شما موضپعی به نظرتون گفتنش لازمه و براتون مقدوره اگه آموزششم بزارید ممنون میشم.
در باره zenity من هنوز مطالعه دقیقی نکردم و چیز زیادی بلد نیستم. البته من یکم زیادی روی قابلیت جابجایی در unix base ها تاکید دارم و به همین دلیل در برنامم نبود
اما اگر شما زحمت بکشید و یک آموزش از این بحث و هر بحث دیگه ای که صلاح میدونید قرار بدید هم من یاد میگیرم و هم حتما بقیه دوستان استفاده خواهند کرد

قصد دارم بد از چند مثال و توضیح در باره dialog برم سروقت linux envienment و terminals و working with files
که البته هر کدوم از این بخش ها به نظرمن یک ماه یا بیشتر کار میبره که من همه اینها رو در چند روز خلاصه میکنم
بعد از اون managing text-base screen with curses رو خواهیم داشت
که این بحث رو تقریبا کامل خواهیم داشت و بعد از data managnet و sql که تقریبا در تمام برنامه ها استفاده خواهند شد و یاد گیری این مباحث هم مهم وضروریه به نظر من
بعد از این بحث سیگنال ها رو به صورت خلاصهداریم و POSIX
بحث inter-process communication رو کلا حذف میکنم و فقط به یک یا دو پست بسنده میکنم(این مقدمات برای تمام برنامه نویسان داخل لینوکس و یونیکس ضروریه چه QT و چه GTK)
به نظرم همین مباحث برای مقدمه کافیه و یکراست بعد از اون GTK+ رو شروع میکنم و برنامه نویسی در محیط محبوب گنوم
اگه عمری بود و لازم بود بعد از GTK+ به سر QT میریم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 30 شهریور 1388، 01:23 ق‌ظ
سلام دوستان
قصد داشتم این پست رو به عنوان کادوی عید به شما و خودم بدم اما به دلایلی نشد

به هر حال الانم دیر نیست
شب عیده دیگه

قراره علاوه بر این فروم در سایت - ویکی - و فروم یک سایت تخصصی برنامه نویسی شروع به نوشتن این کد ها کنم
از تمامی دوستان علاقه مند درخاست میکنم به من کمک کنند تا این سایت و ویکی رو کامل کنیم تا در نهایت
۱)یک مجموعه کامل درست شه
۲)کمکی باشه به دوستامون و سایر برنامه نویسا یا علاقه مندان برنامه نویسی فارسی زبان
۳)کار خیره و خودمونم کلی چیز یاد میگیریم ایشالا

آدرس : http://www.SourceCenter.ir
ویکی : http://wiki.SourceCenter.ir
فروم : http://forum.SourceCenter.ir

البته هیچکدوم از بخش های سایت کامل نیست که هیچ خیلی هم ناقصه
نیاز به چنتا ادمین و کمک کار هست تا باهم راش بندازیم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: mypersonal در 21 مهر 1388، 02:35 ق‌ظ
ممنون دوست عزیز من خیلی تازه کارم واسم خیلی از این حرفاتون سنگینه ولی تلاشمو میکنم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: هادی ناصح در 19 آبان 1388، 06:48 ب‌ظ
سلام دوستان من تازه وارد هستم دنبال یک نفر می گردم که راهنماییم کنه
من می خوام برنامه نویسی php یاد بگیرم
لطفا یکی به من بگه که باید از کجا شروع کنم؟


باتشکر
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: هادی ناصح در 21 آبان 1388، 08:42 ق‌ظ
یکی اینجا نیست که جواب منو بده
ممنون که توجه کردین به سوال من؟؟؟؟؟؟؟؟؟؟؟؟؟
من گفتم می خوام برنامه نویسی phpیاد بگیرم باید از کجا شروع کنم و چی کار کنم؟

ممنون ???
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: heresh در 22 آبان 1388، 05:05 ب‌ظ
نقل‌قول
سلام دوستان من تازه وارد هستم دنبال یک نفر می گردم که راهنماییم کنه
من می خوام برنامه نویسی php یاد بگیرم
لطفا یکی به من بگه که باید از کجا شروع کنم؟

سلام
اگه زبان انگلیسیت خوب باشه مشکلی پیدا نمی‌کنی، منابع آموزشی زیادی هست فقط کافیه یه جستجو کنی. برای آموزش به زبان فارسی من سایت‌ها و وبلاگ‌هایی رو دیدم ولی جامع نبودن و هر کدوم یه سری نکات یا کد گذاشته بودن.
می‌تونی اول LAMP رو نصب کنی (Linux Apache Mysql PHP) تا سیستمت به سرور تبدیل بشه و سایت‌هایی که می‌سازی بصورت لوکال اجرا کنی یا اینکه برای شروع چون مبتدی هستی و شاید نخوای خودت رو درگیر کارهای دیگه بکنی می‌تونی از سایت‌هایی مثل http://www.writecodeonline.com/php/  (http://www.writecodeonline.com/php/) استفاده کنی تا استکریپت‌های ساده‌ای که نوشتی رو اجرا کنی
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: هادی ناصح در 23 آبان 1388، 08:56 ق‌ظ
نقل‌قول
سلام دوستان من تازه وارد هستم دنبال یک نفر می گردم که راهنماییم کنه
من می خوام برنامه نویسی php یاد بگیرم
لطفا یکی به من بگه که باید از کجا شروع کنم؟

سلام
اگه زبان انگلیسیت خوب باشه مشکلی پیدا نمی‌کنی، منابع آموزشی زیادی هست فقط کافیه یه جستجو کنی. برای آموزش به زبان فارسی من سایت‌ها و وبلاگ‌هایی رو دیدم ولی جامع نبودن و هر کدوم یه سری نکات یا کد گذاشته بودن.
می‌تونی اول LAMP رو نصب کنی (Linux Apache Mysql PHP) تا سیستمت به سرور تبدیل بشه و سایت‌هایی که می‌سازی بصورت لوکال اجرا کنی یا اینکه برای شروع چون مبتدی هستی و شاید نخوای خودت رو درگیر کارهای دیگه بکنی می‌تونی از سایت‌هایی مثل http://www.writecodeonline.com/php/  (http://www.writecodeonline.com/php/) استفاده کنی تا استکریپت‌های ساده‌ای که نوشتی رو اجرا کنی
ممنون عزیزم از راهنماییت یه سوال دیگه برای شروع آموزشش بهتره چه کاری انجام بدم یعنی از کجا شروع کنم کلاس برم یا از منابع دیگه مثلا سایت های آموزشی وکتاب استفاده کنم؟
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: heresh در 23 آبان 1388، 11:45 ق‌ظ
نقل‌قول
ممنون عزیزم از راهنماییت یه سوال دیگه برای شروع آموزشش بهتره چه کاری انجام بدم یعنی از کجا شروع کنم کلاس برم یا از منابع دیگه مثلا سایت های آموزشی وکتاب استفاده کنم؟
انتخاب بین اینها به خیلی چیزا بستگی داره مثلا اینکه کیفیت کلاس‌هایی که تشکیل می‌شه در چه حدی هست یا منابعی که در اختیار داری مثل سایت یا کتاب خوب هستن یا نه، و مهمتر از اینها خودت با کدومش راحت هستی و بهتر یاد می‌گیری. رفتن به کلاس یه مزیت داره اون هم اینکه راهی که باید طی کنی مشخصه و استادی وجود داره که جواب سوالاتت رو بده ولی همین مزیت می‌تونه بدی رفتن به کلاس باشه، یعنی شاید اگه خودت وقت بزاری چیزای بیشتر و بهتری یاد بگیری و از وقتی که میزاری بهره بیشتری ببری. انتخاب با خودته
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: هادی ناصح در 23 آبان 1388، 12:00 ب‌ظ
نقل‌قول
ممنون عزیزم از راهنماییت یه سوال دیگه برای شروع آموزشش بهتره چه کاری انجام بدم یعنی از کجا شروع کنم کلاس برم یا از منابع دیگه مثلا سایت های آموزشی وکتاب استفاده کنم؟
انتخاب بین اینها به خیلی چیزا بستگی داره مثلا اینکه کیفیت کلاس‌هایی که تشکیل می‌شه در چه حدی هست یا منابعی که در اختیار داری مثل سایت یا کتاب خوب هستن یا نه، و مهمتر از اینها خودت با کدومش راحت هستی و بهتر یاد می‌گیری. رفتن به کلاس یه مزیت داره اون هم اینکه راهی که باید طی کنی مشخصه و استادی وجود داره که جواب سوالاتت رو بده ولی همین مزیت می‌تونه بدی رفتن به کلاس باشه، یعنی شاید اگه خودت وقت بزاری چیزای بیشتر و بهتری یاد بگیری و از وقتی که میزاری بهره بیشتری ببری. انتخاب با خودته
خیلی خیلی ممنون و متشکرم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: armintirand در 18 آذر 1388، 01:47 ق‌ظ
سلام
از دوستان کسی نمیدونه چرا آقای سجادی ادامه آموزش رو نمیگذارند ؟
من خیلی دلگرم شده بودم چون جای دیگه ای یک آموزش تو این حالت تا حالا ندیده بودم .
در ضمن انجمنی هم که معرفی کردن خالی بود.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 30 آذر 1388، 01:30 ق‌ظ
سلام
از دوستان کسی نمیدونه چرا آقای سجادی ادامه آموزش رو نمیگذارند ؟
من خیلی دلگرم شده بودم چون جای دیگه ای یک آموزش تو این حالت تا حالا ندیده بودم .
در ضمن انجمنی هم که معرفی کردن خالی بود.


سلام
به خدا شرمنده
من خودم از ادمای بدقول بدم میاد اما خودم از همه بد قول ترم
درباره فرومی که معرفی کرده بودم ( یا ساخته بودم) باید بگم که نیاز به کمک داشتم که غیر از دوتا از دوستان کس دیگه ای که وقت نداشت و لذا اون سایت هم به تاریخ پیوست(فعلا)
اما هرجور شده وقتی یکم سرم خلوت تر بشه اونو دوباره راه میندازم
از شما و هرکس دیگه ای که این آموزش رو دنبال میکرد عذر خواهی میکنم
سرم خیلی شلوغه چون اگه خیلی زود پروژه ام رو دفاع نکنم برام صفر رد میشه اما حتما ادامه میدم
بازم شرمنده


برای شروع مجدد (ایشالا که دیگه تنبلی نکنم) با آخرین جدولی که کشیده بودم شرو میکنم
Type         |  Option Used to   |     Meaning
         |  Create Type      |  
======================================================================================================
Check boxes      |  --checklist      |  Allows you to display a list of items, each of which
         |           |  may be individually selected.
------------------------------------------------------------------------------------------------------
Info boxes      |  --infobox      |  A simple display in a box that returns immediately,
         |           |  without clearing the screen.
------------------------------------------------------------------------------------------------------
Input boxes      |  --inputbox      |  Allows the user to type in text.
------------------------------------------------------------------------------------------------------
Menu boxes      |  --menu      |  Allow the user to pick a single item from a list.
------------------------------------------------------------------------------------------------------
Message boxes      |  --msgbox      |  Displays a message to the user with an OK button
         |           |  when they wish to continue.
------------------------------------------------------------------------------------------------------
Radio selection boxes   |  --radiolist      |  Allows the user to select an option from a list.
------------------------------------------------------------------------------------------------------
Text boxes      |  --textbox      |  Allows you to display a file in a scrolling box.
------------------------------------------------------------------------------------------------------
Yes/No boxes      |  --yesno      |  Allows you to ask a question, to which the user
                  |  can select either yes or no.

واما ادامه بحش شیرینی برنامه نویسی
دو نکته رو باید توجه داشت
یکی اینکه چندین مدل دیالوگ دیگه هم وجود داره مثل دیالوگ پسورد یا چیزای دیگه که به اینها دیالوگ های غیر عادی یا unusual هم میگن و برای مطالعخ بیشتر از اینترنت قابل دسترسی هستند
و نکته دیگه اینکه برای اینکه خروجی های این دیالوگ ها رو داشته باشیم باید مقدار استاندارد اررور رو داشته باشیم و به قولی کپچر کنیم
به عنوان یه راه ساده و معمول میشه اون رو به یه یک فایل موقت انتقال داد و خروجی اون رو در یک فایل موقت ریخت
برای به دست آوردن مقادیر yes/no میشه از مقدار exit استفاده کرد که همونجوری که قبلا گفتم مقدار ۰ برای yes و موفقیت و مقدار ۱ برای شکست به کار میره
همه دیالوگ ها پارامتر های خیلی زیادی دارند که کنترلشون میکنه
به عنوان مثال اندازه و ابعاد و یا شکل دیالوگ
خوب بعد از کمی مطالعه بیشتر در باره دیالوگ ها و پارامترهاش سعی میکنم تا یه برنامه کوچیک هم با هم بنویسیم

به جدول زیر دقت کنید
Dialog Type   |   Parameters
======================================================================
--checklist   |   text height width list-height [tag text status] ...
----------------------------------------------------------------------
--infobox   |   text height width
----------------------------------------------------------------------
--inputbox   |   text height width [initial string]
----------------------------------------------------------------------
--menu      |   text height width menu-height [tag item ] ...
----------------------------------------------------------------------
--msgbox   |   text height width
----------------------------------------------------------------------
--radiolist   |   text height width list-height [tag text status] ...
----------------------------------------------------------------------
--textbox   |   filename height width
----------------------------------------------------------------------
--yesno      |   text height width


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

ما یه چک لیست میسازیم و تایتل یا عنوان اون رو Check me میذاریم و توضیح اون رو میذاریم Pick Numbers این دیالوگ رو با ارتفاع ۱۵ و عرض ۲۵ کاراکتر میسازیم

dialog --title “Check me” --checklist “Pick Numbers” 15 25 3 1 “one” “off” 2 “two” “on” 3 “three” “off”
خوب تنها نکته مهمی که به نظرم میرسه تا توجه شما رو بهش جلب کنم اینه که سه پارامتر رو برای هر منو آیتم باید مقدار دهی بشه
Bullet Number
Text
Status

به عوان مثال اولین چک لیست ما دارای شماره ۱ و متن one هستش. موقعیت این آیتم هم off هستش  ;)

خوب برای اینکه یه برنامه بنویسیم نیاز داریم تا خروجی خطای استاندارد (standard error) رو به یه فایل منتقل کنیم و یا با متغیر ها و پارامتر های سیستمی که قبلا باهاشون آشنا شدیم خروجی دستور قبلی رو بخونیم

به برنامه ساده زیر دقت کنید
#!/bin/sh
# Ask some questions and collect the answer
dialog --title “Questionnaire” --msgbox “Welcome to my simple survey” 9 18

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

dialog --title “Confirm” --yesno “Are you willing to take part?” 9 18
if [ $? != 0 ]; then
  dialog --infobox “Thank you anyway” 5 20
  sleep 2
  dialog --clear
  exit 0
fi

حالا یه سوال ساده پرسیدیم که جواب یوزر بله یا خیر خواهد بود
و در ادامه هم همونجوری که میبینید از متغیر محلی $? استفاده کردیم تا جواب یوزر رو چک کنیم و در صورتی که جواب یوزر مثبت بود (یعنی خروجی دستور قبل صفر بود) که هیچی در غیر این صورت یه سری کار انجام میدیم و به عنوان مثال یه infobox که خروجی خاصی نداره قبل از خروج نمایش میدیم و در آخر هم از برنامه خارج میشیم

dialog --title “Questionnaire” --inputbox “Please enter your name” 9 30 2>_1.txt
Q_NAME=$(cat _1.txt)

اسم یوزر رو پرسیدیم و از یه inputbox استفاده کردیم و خروجی خطای استاندارد ، ۲ ، رو به یه فایل موقت منتقل کردیم که اسم این فایل _1.txt هست و ما میتونیم از درون این فایل مقدار Q_NAME رو داشته باشیم

dialog --menu “$Q_NAME, what music do you like best?” 15 30 4 1 “Classical” 2
“Jazz” 3 “Country” 4 “Other” 2>_1.txt
Q_MUSIC=$(cat _1.txt)

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

if [ “$Q_MUSIC” == “1” ]; then
dialog --msgbox “Good choice!” 12 25
fi

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

sleep 5
dialog --clear
exit 0

برنامه بالا یک نمونه از یک برنامه کامل میتونه باشه
چون این روند معمولا در همه برنامه ها (حتی برنمه های خیلی بزرگ) طی میشه
همونجوری که مشاهده می کنید
در همه برنامه ها نیاز هست تا یه پیغام ابتدایی داده بشه
یک سری سوال از کاربر پرسیده بشه
این پرسش ها معمولا در یکی ااز قالب های متنی (مثل اسم) - تک انتخابی مثل منو یا رادیو باکس - چند انتخابی مثل چک باکس جا میشن
و در نهایت هم بر اساس انتخاب های یوزر باید اعمال مختلفی انجام بشه و در مواردی مسیر برنامه تغییر کنه
پس برنامه بالا چهارچوب یه برنامه کامل و اینتر اکتیو هست!

به زودی با هم یه برنامه کامل رو خواهیم نوشت  \\:D/

به امید دیدار

سخن آخر
----------------------------

دوستان من خودم تازه کارم و هیچی بلد نیستم
خوشحال میشم اگه سایر دوستان هم یه کمکی بکنند و هر چند وقت یه بار یه پست کوچیک آموزشی اینجا بذارند
ممنون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: Aboozar در 30 آذر 1388، 10:15 ق‌ظ
دمتون گرم. شما واقعا مصداق فعالیتید!
عنوان: بابا تو دیگه کی هستی
ارسال شده توسط: armintirand در 08 دی 1388، 07:18 ب‌ظ
سلام دوست عزی واقعا که گلی هرچی بگم کمه با اینکه این همه ندت نبودی ولی با یک پست غافلگیرم کردی کاش یک گزینه تشکر این انجمن داشت.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: amir2009 در 24 دی 1388، 01:49 ب‌ظ
خسته نباشی :)
آقا فکر گنم اگه میشد برات تشکر فرستاد تا حالا رکورد زده بودی  ;)
دمت گرم.اگه pdf بشه که دیگه محشره!
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 02 بهمن 1388، 01:08 ق‌ظ
خسته نباشی :)
آقا فکر گنم اگه میشد برات تشکر فرستاد تا حالا رکورد زده بودی  ;)
دمت گرم.اگه pdf بشه که دیگه محشره!

لطف داری

دیگه چیزی از پرپژم نمونده
اگه خدا بخاد خودمم دوست دارم pdf کنمش
قول نمیدم اما تلاشم رو میکنم که الین نسخه pdf این آموزش ر برای عموم آپلود کنم تا عید نوروز (به مناسبت عیدی) و البته پیشاپیش عیدتون مبارک
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید محمود رضا سجادی در 08 بهمن 1388، 08:16 ب‌ظ
سلام مجدد
۱-پروژم دوباره گیر کرد(اگه دوست داشتیم دعا کنین  ;) ممنون)
۲-یه لیست خوب از اسکریپت های یونیکس پیداکردم
درواقع homework یا همون تکالیف شب دانشجویان هست
البته با جواباش
دیدم چون آموزشیه و از سوالاشم خوشم اومد لینکشو اینجا میذارم.
البته جواب هاشو تست نکردم
شاید غلط هم داشته باشه. به هر حال چیزی از زیبایی سوال ها کم نمیشه.
http://btechstudycircle.finduwant.com/FlAsH/Gallery001/Lab/labmanuals/UNIX--labmanual.doc


پیشاپیش سال نو مبارک
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: bahramwhh در 29 فروردین 1389، 09:42 ب‌ظ
سلام دوستان
ممنون از مطالب خیلی خیلی خوبتون  =D>
یه اسکریپت ساده دارم که میزان استفاده‌ی کاربری که به عنوان آرگومان وارد می‌کنیم از فضای دایرکتوری خانگی‌ش رو به ما میده.
ولی به جای چاپ خروجی ( عدد ) همون رشته رو برامون چاپ می‌کنه
اگه ببینید مشکلش چیه ممنون میشم :
#!/bin/bash

if [ $# -lt 1 ]
then
echo "Your Should enter at least one argument to $0 Script !"
exit
fi

cd /home/$1
SPACE='du -s | cut -f 1'

echo "$1 account has used $SPACE Kilobytes of his/her space"

عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 30 فروردین 1389، 03:55 ق‌ظ
بجای:
SPACE='du -s | cut -f 1'باید بنویسید:
SPACE=`du -s | cut -f 1`شما بجای back quote (که دکمه‌ش بالای Tab هست) سینگل‌کوت گذاشته بودید.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: bahramwhh در 30 فروردین 1389، 12:22 ب‌ظ
سپاس عزیز
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: farshid_616 در 02 اردیبهشت 1389، 03:22 ب‌ظ
ایول کارت درسته !  کامل که شد حتما pdf  اش کن
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: siap891 در 27 خرداد 1389، 09:21 ب‌ظ
+1
عنوان: سلام
ارسال شده توسط: faware در 08 امرداد 1389، 01:18 ب‌ظ
اقا مرسی فقط خواهشا میدونم سخته اما واسه دل ما هم که شده Pdf کنید تا واسه همیشه داشته باشیمشون.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: nice_2000 در 16 مهر 1389، 10:22 ب‌ظ
خدا قوت
ما منتظر Gtk هستیم ها!  :)

نا امید شدیم
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: feeruzy در 06 اردیبهشت 1390، 01:20 ق‌ظ
برای اجرای این اسکریپت شما باید اول اجازه اجرا شدن رو بهش بدین
chmod +x firstویا اینکه بنویسید
/bin/sh firstواگر با chmod مجوز اجرا را بهش داده باشین با دستور زیر اجراش کنین
firstاگه با ویغامی مبنی بر اینکه دستور پیدا نشد مواجه شدید معنیش اینکه آدرس محل فایل در PATH وجود نداره پس شما چنتا راه دارین
۱- این فایل رو در یک آدرس معتبر کپی کنین
۲-دستور رو به شکل زیر اجرا کنین
./firstکه به این معنیع که این فایل در آدرس جاری قرار داره
۳- دایرکتوری جاری رو به PATH اضافه کنین یعنی
PATH=$PATH:.به اون نقطه آخر دقت کنین که به معنیه فولدر جاری هستش
۴-ویا اینکه با همون روش بند ۳ آدرس مطلق فلدر جاری رو به PATH اضافه کنین تا از هر جایی بتونین اسکریپت رو اجرا کنین

سلام٬ ممکنه با یه مثال روش تغیر PATH=$PATH:. رو توضیح بدید تا ما هم راه بیوفتیم؟ ???
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: shahramlp در 27 اردیبهشت 1390، 01:46 ق‌ظ
+1
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: c.forel در 23 تیر 1390، 12:28 ب‌ظ
سلام

دادش گلمم این آموزش ها خیلی عالییییییییییییییییییییییییی بودن.

ولی چرا دیگه ادامه نداره.

منتظر بمونیم؟
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: cyrus در 29 امرداد 1390، 02:17 ب‌ظ
درود
 من یک سورس دستم هست که با زبان سی نوشته شده برای اجرا در لینوکس. اولین باری هست که میخوام با این جور سورس ها کار کنم ولی با یکسری مشکل روبرو شدم. اول یکسری توضیحات در مورد سورس میدم.
برای این سورس 2 رابط گرافیکی طراحی شده. یکی برای لینوکس و دیگری برای ویندوز که با VC6 طراحی شده. کامپایل این برنامه به کمک makefile موجود در سورس انجام میشه. حالا من باید سورس را آنالیز کنم ، باگ های احتمالی را شناسایی کنم و در نهایت کد را توسعه بدم. قصد نهایی من پورت کردن این کد به ویندوز هست. ابزاری که استفاده میکنم cygwin است . ولی تفاوت های اساسی با سورس های تحت داس و ویندوز وجود داره که این کار رو خیلی برای من سخت کرده. من قادر به ترجمه خط به خط برنامه (trace) نیستم. کدی هم که خودم ننوشتم تحلیل بدون این ابزار کار مشکلی میشه. یک نمونه ساده برای توضیح این سختی به شما میدم. فرض کنید شما در یک محیط برنامه نویسی مثل سی یا دلفی برنامه مینوسی. خوب شما یک فایل dsp یا dsw داری که با باز کردن اون به بدنه اصلی سورس و فرم ها دسترسی داری. با ترجمه خط به خط برنامه به یک تابعی میرسی که برنامه نویس کد اون تابع رو در یک کتابخانه که خودش نوشته قرار داده. حالا این کد 20 تا از این کتابخانه ها را با include فراخوانی کرده و حالا اگر شما trace کردن رو ادامه بدی IDE شما به طور خودکار منبع اون فایل با پسوند h را باز میکنه و ادامه trace کردن در اون فایل انجام میشه بعد از اتمام تابع به قطعه کد فراخوان کننده تابع بر میگرده. شما با این ابزار هم یک تصویر سازی از نحوه اجرا کد در ذهن دارید که تحلیل و خطایابی را آسان میکند و هم دیگر نیازی نیست که برای پیدا کردن قطعه کد مربوط به تابع مورد نظر تمام فایل ها رو یکی یکی مرور کنید. حالا سئوال من از شما اینکه با چه ابزاری من میتونم مثل مثال بالا کد را تحلیل کنم؟؟
من سعی کردم از Code::Block کمک بگیرم ولی چون برنامه به کمک Makefile کامپایل میشد به نتیجه نرسیدم.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: Farzad-Sabator در 21 دی 1390، 11:39 ق‌ظ
سلام دوستان

من یه سوال داشتم

میخوام یه برنامه لینوکسی بنویسم که قراره به اینترنت متصل باشه و با یک سری ای پی ها

که اوپن سورس هم هست کار کنه

کدوم زبان رو پیشنهاد میدین؟

فقط به جز پیتون
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: سلمان م. در 03 بهمن 1390، 05:32 ب‌ظ
عزیزم
شما می‌تونی با «زبون سی» کار کنی و برای GUI از glade استفاده کنی. دقیقا کاری که empathy می‌کنه !!! glade بر پایه‌ی gtk+ هست.

طبق گفته‌ی بنیاد نرم‌افزارهای آزاد، تو «استانداردهای کدنویسی گنو» (GNU Coding Standards) نوشته که بهتره برای برنامه‌نویسی برای گنو/لینوکس‌ها از زبان سی استفاده کنیدو یک سری راهنمایی‌ها برای کامپایلرها و ... نوشته که همه‌ی اونا جمع شده تو Anjuta !

آنجوتا IDE مخصوص گنوم هست که خیلی خیلی کمکت می‌کنه و کلی از کارهاتو کم می‌کنه.
اگه بازم سوالی داشتی بپرس.
عنوان: پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: دانیال بهزادی در 03 بهمن 1390، 05:40 ب‌ظ
سلام

دادش گلمم این آموزش ها خیلی عالییییییییییییییییییییییییی بودن.

ولی چرا دیگه ادامه نداره.

منتظر بمونیم؟

می‌گن برنامه‌نویس‌ها هیچ وقت ازدواج نمی‌کنن، اگه هم کردن دیگه برنامه نویس نیستن ;D
عنوان: پاسخ : پاسخ به: شروع برنامه نویسی در لینوکس
ارسال شده توسط: A m i n در 06 اردیبهشت 1391، 09:42 ق‌ظ
سلام

دادش گلمم این آموزش ها خیلی عالییییییییییییییییییییییییی بودن.

ولی چرا دیگه ادامه نداره.

منتظر بمونیم؟

می‌گن برنامه‌نویس‌ها هیچ وقت ازدواج نمی‌کنن، اگه هم کردن دیگه برنامه نویس نیستن ;D
یعنی میخای بگی ایشون ازدواج کردن
بابا مبارکه  \\:D/ \\:D/ \\:D/
ولی انصافا مبحث آموزشی جالبی بود کاش ایشون یا سایر دوستان ادامه بدن ::)
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: SMOK در 21 اردیبهشت 1391، 08:36 ب‌ظ
سید جان لطفا ادامه بده
در ضمن اگر منابعت رو بگی ممنون می شیم
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: Al!rezA در 27 تیر 1391، 01:01 ب‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

ممنون میشم مثل همیشه راهنمایی کنید
 
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید مسعود امامیان در 27 تیر 1391، 08:24 ب‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

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

با سلام

محیط مثل #C نه ! محیطی مثل Net. .

من سی شارپ کار کردم و زبان کاربردی هم هست و الان به پایتون رو آوردم.
به نظره من پایتون رو شروع کن چون هم آسانه هم شیرین هم کاربردی.(اگه سی شارپ رو بلد باشید حدودا 2 هفته ای پایتون رو یاد گرفتید. تضمینی  ;) )

البته بستگی به خوده شما داره .(درس - درآمد و . . . در نظر بگیرید بعد شروع به یادگیری کنید. )
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: دانیال بهزادی در 27 تیر 1391، 10:33 ب‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

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

محیط که ربطی به زبون نداره. من به شما با توجه‌به این که #C می‌دونی ++C با Eclipse رو پیشنهاد می‌دم و همین‌طور Qt در محیط Qt Creator
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: aliva در 27 تیر 1391، 11:06 ب‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

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

http://www.mono-project.com
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: Al!rezA در 28 تیر 1391، 06:05 ق‌ظ
با سلام

محیط مثل #C نه ! محیطی مثل Net. .

من سی شارپ کار کردم و زبان کاربردی هم هست و الان به پایتون رو آوردم.
به نظره من پایتون رو شروع کن چون هم آسانه هم شیرین هم کاربردی.(اگه سی شارپ رو بلد باشید حدودا 2 هفته ای پایتون رو یاد گرفتید. تضمینی  ;) )

البته بستگی به خوده شما داره .(درس - درآمد و . . . در نظر بگیرید بعد شروع به یادگیری کنید. )
سلام
ممنون حق با شماست منظورم محیطی مثل زبون هایی تحت ویژوال استودیو هست من با بقیشون کار نکردم 
البته من #C رو بصورت حرفه ای نمیدونم به خاطر همین چند نفر گفتن دنبال زبون دیگه ایی نرو و همین رو کار کن پیشرفته از طرف دیگه یه سری گفتن با چندتای دیگه هم کار کن شاید ساده تر و بهتر پیدا کنی!
نرمافزار میخونم ولی دانشگاه زیاد وقت نمیزارن رو یه مبحث  هدفم اینه که فقط یوزر نباشم
محیط که ربطی به زبون نداره. من به شما با توجه‌به این که #C می‌دونی ++C با Eclipse رو پیشنهاد می‌دم و همین‌طور Qt در محیط Qt Creator
سلام ممنون
منظورم این بود که زبان نزدیک به #C باشه و محیط هم به قول دوستمون به NET. شبیه

 

http://www.mono-project.com
سلام ممنون
اگه اطلاعات بیشتری دارید ممنون میشم بفرمایید
این طور که من متوجه شدم با این میشه به همون #C برای لینوکس کد نویسی کرد

------------------------
خیلی خیلی ممنون از دوستان برای راهنمایی
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: ahmadalishytvn در 01 امرداد 1391، 12:54 ق‌ظ
سلام راست میگه دوست عزیز pdf این اموزش رو درست کن تا همه از این زحمت شما راحت استفاده کنن و زمان های بیکاری راحت تر مطلب های شما رو بخنون و فرا بگیرن ممنون از اموزش خوب شما .
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: #elahe# در 10 امرداد 1391، 08:57 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: امیرحسین گودرزی در 10 امرداد 1391، 09:10 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
مگه میشه کامپایلر نداشته باشی؟؟؟
کد‌ها باید تحت ++g تو ترمینال کامپایل شن
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 10 امرداد 1391، 09:10 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
میشه 14
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: آرمان اسماعیلی در 10 امرداد 1391، 09:18 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
میشه 14
من الان خودم جمع کردم شد 17  ??? اشتباهم کجا بود یعنی؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: #elahe# در 10 امرداد 1391، 09:19 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
میشه 14
جوابش رو که خودم میدونم
یا میشه 14
و یا 16
میخوام ببینم کامپایلرهای مختلف چه جوابی میدن
شما با کدوم امپایلر کامپایل کردین ؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doflamingo در 12 امرداد 1391، 12:37 ق‌ظ
سلام خدمت تمامی دوستان عزیز
خسته نباشید

بنده قصد خرید یه لپتاپ gazelle professional از کمپانی system 76 رو دارم
https://www.system76.com/laptops/model/gazp7
همونطور که دوستان میدونن، این لپتاپ از اول سیستم عامل اوبونتو رو داره
تواناییش هاش هم نبست به قیمتش عالیه، واسه همین شکی تو خریدش ندارم
فقط یه مورد میمونه که میخواستم بپرسم
من از پاییز امسال وارد دانشگاه میشم و توی رشته مهندسی نرم افزار مشغول به تحصیل میشم
میخواستم از دوستان برنامه نویس بپرسم که آیا هیچ مشکلی برای نوشتن برنامه با این سیستم عامل دارن با نه؟ 
یا در واقع بگم که نرم افزار های مخصوص برنامه نویسی، آیا همگی تو لینوکس هم هستن یا نه؟

ممنون
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: theMaster در 12 امرداد 1391، 03:46 ق‌ظ
بستگی به استادا داره که چی بخوان
اگه برنامه نویسی سی شارپ و دات نت بخوان نه نداره! البته مونو هست ولی نمیشه بهش تکیه کرد
ولی اگه سی ++ جاوا پی اچ پی و خلاصه هرچیزی به غیر از مایکروسافت بخوان داره!  ;D
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: مهران رهباردار (mehionline) در 12 امرداد 1391، 09:20 ق‌ظ
سلام خدمت تمامی دوستان عزیز
خسته نباشید

بنده قصد خرید یه لپتاپ gazelle professional از کمپانی system 76 رو دارم
https://www.system76.com/laptops/model/gazp7
همونطور که دوستان میدونن، این لپتاپ از اول سیستم عامل اوبونتو رو داره
تواناییش هاش هم نبست به قیمتش عالیه، واسه همین شکی تو خریدش ندارم
فقط یه مورد میمونه که میخواستم بپرسم
من از پاییز امسال وارد دانشگاه میشم و توی رشته مهندسی نرم افزار مشغول به تحصیل میشم
میخواستم از دوستان برنامه نویس بپرسم که آیا هیچ مشکلی برای نوشتن برنامه با این سیستم عامل دارن با نه؟ 
یا در واقع بگم که نرم افزار های مخصوص برنامه نویسی، آیا همگی تو لینوکس هم هستن یا نه؟

ممنون
چه طوری میخاین بخرین؟ توی بازار ایران هست؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: علی بهجتی در 12 امرداد 1391، 07:53 ب‌ظ
من کامپایل کردم شد ۱۴ ! در واقع هم همینه ! ۳ مثبت هیچ معنایی نداره !
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: علی بهجتی در 12 امرداد 1391، 07:56 ب‌ظ
سلام خدمت تمامی دوستان عزیز
خسته نباشید

بنده قصد خرید یه لپتاپ gazelle professional از کمپانی system 76 رو دارم
https://www.system76.com/laptops/model/gazp7
همونطور که دوستان میدونن، این لپتاپ از اول سیستم عامل اوبونتو رو داره
تواناییش هاش هم نبست به قیمتش عالیه، واسه همین شکی تو خریدش ندارم
فقط یه مورد میمونه که میخواستم بپرسم
من از پاییز امسال وارد دانشگاه میشم و توی رشته مهندسی نرم افزار مشغول به تحصیل میشم
میخواستم از دوستان برنامه نویس بپرسم که آیا هیچ مشکلی برای نوشتن برنامه با این سیستم عامل دارن با نه؟ 
یا در واقع بگم که نرم افزار های مخصوص برنامه نویسی، آیا همگی تو لینوکس هم هستن یا نه؟

ممنون
لینوکس بهشت برنامه‌نویساس ! ولی خب دلیل نمیشه همه رو داشته باشه. ویژوال استودیو رو به هیچ وجه نمیتونی اون تو پیدا کنی و از دات نت کلا خبری نیست‌! بقیه چیزا همه هستن سالم و سر حال ! ;) و لذت هم در اینه که زبانی که استفاده میکنی کتابخانه هاش انحصاری نباشه ;)
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 12 امرداد 1391، 08:17 ب‌ظ
سلام
من واسه ++C هیچ کامپایلری تو لینوکس ندارم
لطفا این تکه کد رو تو دو سه تا کامپایلر کامپایل کنید و حاصل عبارت رو بگید
[left]int a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;[/left]

با تشکر
میشه 14
جوابش رو که خودم میدونم
یا میشه 14
و یا 16
میخوام ببینم کامپایلرهای مختلف چه جوابی میدن
شما با کدوم امپایلر کامپایل کردین ؟
مگه میشه دو تا کامپایلر سی پلاس ، یک گزاره رو دو جور کامپایل کنه ؟
همه جا و همه کامپایلرا باید 14 بده
===================================
نقل‌قول
من الان خودم جمع کردم شد 17  ??? اشتباهم کجا بود یعنی؟
این را بکاپمایلیدint a=2;
int b=5;
cout<<a+++a+++b+++b<<endl;
cout <<"a="<<a<<"\n b="<<b<<endl;
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doflamingo در 12 امرداد 1391، 09:07 ب‌ظ
چه طوری میخاین بخرین؟ توی بازار ایران هست؟
نه متاسفانه توی بازار ایران نیست
اما واسه من فرقی نداره چون زیاد سفر میکنم احتمالا تو یکی از سفرهام به آمریکا یا کشور دیگه ای بخرمش ^_^
________________
از بقیه دوستان هم ممنونم، یه سوال دیگه هم داشتم برنامه wine به چه صورته؟
اون رو اگر بریزم میتونه کمبود های نرم افزار ها رو برام برطرف کنه؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: سید مسعود امامیان در 12 امرداد 1391، 10:00 ب‌ظ
چه طوری میخاین بخرین؟ توی بازار ایران هست؟
نه متاسفانه توی بازار ایران نیست
اما واسه من فرقی نداره چون زیاد سفر میکنم احتمالا تو یکی از سفرهام به آمریکا یا کشور دیگه ای بخرمش ^_^
________________
از بقیه دوستان هم ممنونم، یه سوال دیگه هم داشتم برنامه wine به چه صورته؟
اون رو اگر بریزم میتونه کمبود های نرم افزار ها رو برام برطرف کنه؟

اسمش رو کمبود نذارید!!! این عادت و وابستگی شماست .


سرچ کنید قبلا گفته شده .
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: nixoeen در 12 امرداد 1391، 10:05 ب‌ظ
من الان خودم جمع کردم شد 17  ??? اشتباهم کجا بود یعنی؟
به این صورت بخونیدش:
cout<<  (a++) + (a++) + (b++) + b << endl;
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: mohammad_d در 27 شهریور 1391، 01:49 ب‌ظ
سلام

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

الان یک سوالی واسم پیش اومده ، زبانی که ایشون باهاش کد مینوشتن اگر درست بگم همون چیزی هست که سایر دستورات توی ترمینال رو هم باهاش مینویسند و بهش زبان گنو/لینوکس گفته میشه (نمیدونم چقدر درست گفتم)

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

مثلا برای کسانی که به سی و سی++ یا جاوا مسلط هستند یادگیریش توصیه میشه اصلا؟ یا خیر
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: alend در 27 شهریور 1391، 02:36 ب‌ظ
این ها کدهای BASH است.

بستگی به نیاز دارد، ولی در خیلی از موارد یک خط کد BASH معادل 10-100 خط کد ++C است.
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: دانیال بهزادی در 30 شهریور 1391، 08:42 ب‌ظ
مزایای بش اینه که دسترسی به پرونده‌ها و محتویاتش خیلی آسونه و به راحتی با صدها برنامه‌ی مختلف یونیکسی ترکیب می‌شه تا بشه باهاشون کارهای خلاقانه‌ی بیش‌تری انجام داد. یه سری مثال‌های کاربردی رو می‌تونی این‌جا ببینی: http://jadi.net/tag/%DA%86%D8%B1%D8%A7-%DA%AF%D9%86%D9%88%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%B1%D9%88-%D8%AF%D9%88%D8%B3%D8%AA-%D8%AF%D8%A7%D8%B1%D9%85/
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: Stuxnet در 12 آبان 1391، 11:38 ب‌ظ
سلام دوست عزیز
مطالبتون خیلی عالیه
میشه کتابی را که از از آن کمک می گیرید برای دانلود بگذارید.
کلا من با کتاب های زبان اصلی بیشتر حال می کنم.
با تشکر
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 22 آذر 1391، 06:01 ب‌ظ
درود بر همگی
گفتم دیگه مبحث نو باز نکنم همینجا بپرسم
میخوام با سی پلاس یک چند تا شکل گرافیکی ساده رسم کنم
خط و مستطیل تنها شکلهایی هست که نیاز دارم
البته اگر از لایه بندی پشتیبانی کنه بسیار خوب میشه اگر هم نداشت خودم یک کاریش میکنم
SDL رو دیدم برای کارهای پیچیده بود
cairo رو دیدم خوبه
از این آسون تر کسی کار کرده ؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: majidkamali1370 در 22 آذر 1391، 07:34 ب‌ظ
SFML
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: عدس در 11 دی 1391، 12:55 ب‌ظ
سلام و درود دوستان گرامی.
من برای برنامه نویسی در ubuntu پکیج های eclipse را پیشنهاد میکنم .
محیطی بسیار عالی با دسترسی عالی به همه چیز .
خداوکیلی من که یک سال است باهاش کار میکنم تا حالا کمبود و عیبی را احساس نکردم . قبلا با   code::blocks کار میکردم . ولی eclipse یه چیز دیگست .
همه ز بانی رو هم ساپورت میکنه .
از همه مهمتر که باهاش هم میتونی makefile وهم cmake درست کنی .
شناسوندن lib هم کاری نداره .
حتما امتحانش کنید . لذت برنامه نویسی را حس میکنید .
شرمنده که یه تیکه پارازیت بودم .
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 14 دی 1391، 05:31 ب‌ظ
یک پرسشی در سی پلاس دارم گفتم همینجا بنویسم :
یک لیست داریم به نام towers_list .
چجوری میشه فهمید یک اشاره گر به یکی از عنصر های این لیست ( از نوع iterator ) آیا در بازه ی عنصرهای این لیست هست یا خیر ؟

نمونه :list<tower> towers_list ;
list<tower> :: iterator beginning=towers_list.begin();
list<tower> :: iterator temp_iter=beginning;
temp_iter--;
if(temp_iter)
cout <<"is in range"<<endl;
else
cout <<"out of range"<<endl;
l

کد بالا تو بخش if خطا میده و میگه نمیتونه iterator رو به bool برگردونه . تابعی چیزی نداره چک کنه ببینه اشاره گر تو بازه ی لیست هستش یا خیر ؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: alend در 14 دی 1391، 06:07 ب‌ظ
فکر باید چک کنی که آیا در رنج begin و end لیست هست یا نه.
ولی تا آنجا که من می دونم معمولا iterator را با for استفاده می کنند که این مشکل را ندارد.


http://stackoverflow.com/questions/2062956/c-best-way-to-check-if-an-iterator-is-valid
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: majidkamali1370 در 14 دی 1391، 06:15 ب‌ظ
پاک شد.
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 14 دی 1391، 06:23 ب‌ظ
بازه های iterator تو سی‌پلاس 2011 اومده لاکن مثلا شما این مشکل رو چجوری حل میکنی؟
اگر یک اشاره گر به یک لیست داشته باشیم ، اگر لیست به اندازه ی 100 عنصر داشته باشه ، شما اگر اشاره گر رو به اضافه ی 10000 هم بکنی مشکلی پیش نمیاد و خروجی خواهی داشت :
#include <iostream>
#include <list>

using namespace std;
int main ()
{
  list<int> mylist;
 
  for(int i=0;i<100;i++)
  {
     mylist.push_back(i);
  }
 
  list<int>::iterator temp_iter=mylist.begin();
  for(int i=0;i<10000;i++)
  {
     temp_iter++;
  }
 
  cout <<"\n 10000th element of list:"<<*temp_iter<<"!!!"<<endl;
 
  return 0;
}
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 14 دی 1391، 06:29 ب‌ظ
اگر از iterator استفاده میکنید با اپراتور ! میشه فهمید.
list<tower> :: iterator temp_iter=beginning;
if(!beginning)
   cout << "Beginning is in range";

برای من که کار نمیده :

if(!temp_iter) : test.cpp:20: error: no match for ‘operator!’ in ‘!temp_iter’
test.cpp:20: note: candidates are: operator!(bool) <built-in>
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: majidkamali1370 در 14 دی 1391، 08:07 ب‌ظ
عذر میخوام اشتباه کردم. یه چیزی بود شبیه این. شرمنده
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: doomhammer65ir در 14 دی 1391، 08:36 ب‌ظ
فکر باید چک کنی که آیا در رنج begin و end لیست هست یا نه.
ولی تا آنجا که من می دونم معمولا iterator را با for استفاده می کنند که این مشکل را ندارد.


http://stackoverflow.com/questions/2062956/c-best-way-to-check-if-an-iterator-is-valid (http://stackoverflow.com/questions/2062956/c-best-way-to-check-if-an-iterator-is-valid)
خوب این پاسخ رهنمایاند بنده را به اینکه :
iterator ها دو گونه است :
یا برای کانتینرها و گنجه هایی که میشه در هر آن به هر عنصری که خواستی ازش دسترسی بیابی ( مانند بردارها ) یا برای گنجه هایی که هر ان تنها میتونی به عنصرهای ویژه ای ازش دستیابی داشته باشی ( مانند فهرست ها که هر آن تنها به سر و ته ان دسترسی داریم و برای دیگر عنصرها باید از سر یا ته فهرست آغاز کرده ، عنصرها را بپیماییم . )
هنگامی که بردارها رو داشته باشیم به سادگی مینویسیم :
if (temp_iter >towers_vector.begin() && temp_iter<towers_vector.end() )خوب حالا راهنمایی بفرمایید کدام کانتینر است هم ویژگی های لیست را داشته باشد هم دسترسی تصادفی به عناصر؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: sanaderi در 19 بهمن 1391، 11:00 ق‌ظ
از دوستان کسانی که مایلند با کیوتی آشنا شوند و آن را یاد بگیرند دعوت می شود به ما ملحق شوند،فعلا هر 4 روز یک مقاله جدید در پایگاه پروژه کیوت فارسی به صورت رایگان منتشر می شود.قطع با پیوستن شما این امر شتاب بیشتری خواهد گرفت.
شک نکنید و کلیک کنید....qt-project.ir (http://qt-project.ir)
در این پایگاه پروژه هایی مطرح می شود و به صورت دسته جمعی کامل خواهد.پس از همین لحظه منتظر حضور گرم شما در پیشبرد دنیای کد باز هستیم.
qt-project.ir (http://qt-project.ir)
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: alijet در 04 اسفند 1391، 07:18 ب‌ظ
یک سوال مهم
آیا راهی هست که توی ubuntu با c++ برنامه نوشت ؟
من خودم با shell بلد نیستم ولی با c++ خوب بلدم
به همین دلیل خواهش میکنم که راه نوشتن برنامه به زبان c++ رو در ubuntu  به من یاد بدید
 : [-o<
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: محسن ح. در 04 اسفند 1391، 07:19 ب‌ظ
معلومه که میشه !!!
کافیه یه IDE واسش نصب کنی !
مثل Eclipse !
توی سافتوار سنتر هم میتونی جستجو کنی واسش :)
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: سلمان م. در 04 اسفند 1391، 07:26 ب‌ظ
علی‌جت جان،
شما تو گنو/لینوکس هم می‌تونید که به مانند ویندوز از IDE استفاده کنید و هم اگه دوست داشتید دستورهاتون رو با یه ویرایشگر متن بنویسید و به صورت مستقیم توسط کامپایلر (مثلا GCC) کامپایل کنید.
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: mehdi.newdesign در 29 اسفند 1391، 08:16 ب‌ظ
سلام دوست عزیز آقای سجادی

ممکنه منبعی که خودتون از روش مطالعه کردین رو یا آپلود بفرمایید یا اینکه معرفی کنید تا ما هم مطالعه کنیم،درضمن اگر خودتون منبع مناسب دیگری رو هم مد نظر دارید بفرمایید.

همونطور که میدونید منابع کمی برای آموزش وجود دارند
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: arf1372 در 14 اردیبهشت 1392، 02:19 ق‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

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

سلام

می بخشید! شاید چند سالی باشه که نیومدم!

و البته شما هم سال ِ پیش این سؤال رو پرسیدین!

پس جواب می دم برای اون هایی که ممکنه جدیداً به چنین مسئله این بخورن!

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

برای نصب ِ جاوا هم می تونین از این دستورات استفاده کنین!

$ sudo apt-get install openjdk-7-*
که فکر کنم کفاف ِ تمام ِ نیاز های جاوایی تون رو بده! :دی

برای IDE هم به شخصه اکلیپس رو برای هر زبونی پیشنهاد می کنم!

$ sudo apt-get install eclipse
امیدوارم بتونم به جامعه ی آزاد کمکی کرده باشم!

سلامت باشید و
التماس دعا!
 
 

عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: abbasalim در 31 اردیبهشت 1392، 11:46 ق‌ظ
سلام
ببخشید من یه مقدار #C میدونم و برنامه های ساده ای که کارم رو راه میندازه برای ویندوز نوشتم

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

چه زبونی شبیه به #C هست که توی ابونتو بتونم باهاش کار کنم میخوام محیط مثل #C باشه مثلا ارور بگیره و کسل کننده نباشه کار باهاش

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

سلام

می بخشید! شاید چند سالی باشه که نیومدم!

و البته شما هم سال ِ پیش این سؤال رو پرسیدین!

پس جواب می دم برای اون هایی که ممکنه جدیداً به چنین مسئله این بخورن!

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

برای نصب ِ جاوا هم می تونین از این دستورات استفاده کنین!

$ sudo apt-get install openjdk-7-*
که فکر کنم کفاف ِ تمام ِ نیاز های جاوایی تون رو بده! :دی

برای IDE هم به شخصه اکلیپس رو برای هر زبونی پیشنهاد می کنم!

$ sudo apt-get install eclipse
امیدوارم بتونم به جامعه ی آزاد کمکی کرده باشم!

سلامت باشید و
التماس دعا!
 

به نظره من هم سی شارپ فوق العاده شبیه جاوا هست البته چون هردوتاشون از سی و سی ++ گرفته شدن این شباهت ها هست (به نظره من ) واسه ide  هم
اکلیپس ، نت بینز ، اینتلیج هر سه تاشون خوبن آخری خوشکل تره و نت بینز پر امکانات تر و اکلیپس هم صاف و ساده و به نظره من جذاب (نمیدونم چرا  :D)
با
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: بهنام … در 06 خرداد 1392، 07:54 ب‌ظ
سلام به همه
کسی میدونه برای ادامه‌ی بحث شروع برنامه نویسی در لینوکس به چه تاپیک یا سایتی باید مراجعه کنم؟
ترجیحا هدایت بشه به سمت جاوا یا سی پلاس پلاس.
من از ابتداش خوندم و خوشم اومده بود ولی هم مشکلاتی داشتم و هم ...
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: abbasalim در 06 خرداد 1392، 11:50 ب‌ظ
سلام به همه
کسی میدونه برای ادامه‌ی بحث شروع برنامه نویسی در لینوکس به چه تاپیک یا سایتی باید مراجعه کنم؟
ترجیحا هدایت بشه به سمت جاوا یا سی پلاس پلاس.
من از ابتداش خوندم و خوشم اومده بود ولی هم مشکلاتی داشتم و هم ...

البته تا اونجا که من از جاوا میدونم
سیستم عامل براش مطرح نیست و کدهاش داخله همه سیستم عامل ها یکیه
سی ++ هم نمیدونم  ;D
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: deadmarshal در 21 خرداد 1392، 08:33 ب‌ظ
سلام مرسی از آموزشی که گذاشتی ادامه بده من خیلی علاقه مندم با تشکر از شما
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: mmsaeed در 23 خرداد 1392، 03:07 ب‌ظ
سلام دوست عزیز
از آموزش خوبت ممنون
اگه میشه pdf هرقسمت که آموزش میدین رو هم بزارین واسه دانلود
متشکر
موفق باشی
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: soroush419 در 10 امرداد 1392، 01:47 ق‌ظ
سلام
نقل‌قول
به جای عبارت فوق با لوله کشی به عبارت زیر میرسیم (علامت لوله کشی | هستش)
کد: [انتخاب]
ps | sort > pssort.out
همونطوری که دیده میشه فایل میانی که اضافه هم بود حذف شد و سرعت عملیلت هم بیشتر شد در صورتی که اگه این لوله کشی مجازی بود در واقه قسمتی از حافظه به عنوان temp قرار می گرفت و خروجی ابتدا در اون ذخیره میشد و سپس sort میشد در صورتی که در عبارت لوله کشی این فرایند به صورت موازی انجام میشه

یک شاهد دیگه برای موازی انجام شدن این فرایند دستور زیره
کد: [انتخاب]
cat mydata.txt | sort | uniq | > mydata.txt
اگه این فرایند مجازی بود نباید مشکلی پیش میومد اما در دستور فوق به علت موازی بودن فرایند شما فقط یه فایل خالی گیرتون میاد.
دلیل این حرف و اتفاق هم اینه که فایل mydata.txt قبل از اینکه خونده بشه با دستور < داره جایگزین میشه(با یه فایل خالی) و لذا با نوشتن دستور فوق همیشه یک فایل خالی تحویل میگیرین

می خواستم بدونم منظور از لوله کشی واقعی چیست ؟ بنا به استدلال اقای سجادی دلیل اینکه فایل mydata همیشه خالی هست این هست که هیچ دیتایی نیست که در مای دیتا ریخته شود برای همین همیشه خالی است اما برهمین استدلال در مثال اول هم چون موازی هست نباید دیتایی برای مرتب سازی وجود داشته باشد در نیجه همیشه فایل ما باید خالی باشد ؟

سوال ۲:
من با توضیح که در کتاب bash guide ترجمه اقای پهلوانی فایلی رو به PATH اضافه کردم که حال هر دفعه ترمینال رو باز می کنم با این ارور مواجه می شم
دستور :
‫"‪$ mkdir -p "$HOME /bin‬‬
‫"‪$ echo 'PATH=" $HOME /bin:$PATH "' >> "$HOME /.bashrc‬‬
‫‪$ exec bash‬‬
ارور:
PATH: command not found
 
می خواستم بدونم می تونم PATH رو به حالت قبل بر گردونم ؟

سوال 3 ؟
if [ -f fred.c ]
then
....
fi
در این مثال نباید [ برداشته بشه تا ] معنی تست رو بده ؟

سوال ۴ :
من به طور ناشیانه ای هنگام نوشتن این کد فراموش کردم [] بزارم
#!/bin/sh
echo is it morning ?
read answer
if [ $answer = yes ]
then
echo good morning
else
echo good after noon
fi
چرا وقتی [] نباشه همچین اتفاقی رخ می دهد ؟
عنوان: پاسخ : شروع برنامه نویسی در لینوکس
ارسال شده توسط: سعید رسولی در 17 امرداد 1392، 02:10 ب‌ظ
توصیه می‌کنم برای شل اسکریپتینگ، این کتاب رو بخونید:
http://wiki.linuxreview.ir/Shell-scripting-tutorial