Ahmad24
06-08-2013, 05:03
با سلام به همه دوستان
اول باید بگم این آموزش برای کاربران لینوکسه.کاربران ویندوز نمیتونند با این آموزش ارتباط برقرار کنن.(منظورم سیستم عامل کامپیوتر شما نیست طرز فکر شماست)
در اهمیت اسکریپت نویسی همین قدر بگم که اکثر لینوکس سرورها اصلا محیط دسکتاپ ندارند و مدیران از خط فرمان و معمولا اسکریپتها اونها رو اداره میکنند.
پیشنیاز دنبال کردن این تاپیک اینه که شما باید بتونید جملات ساده انگلیسی رو ترجمه و درک کنید(کاربران لینوکس مسلما میتونند)
خوب بهترین راه برا آموزش دنبال کردن خط به خط یه اسکریپت ساده است.اسکریپت زیر در سیستم من برای دانلود شبانه استفاده میشه(اعداد شماره خط رو بیان میکنن و جزء اسکریپت نیستند) :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط اول رو بهش میگن شی بنگ shebang
به مفسر میگه این فایل اسکریپت رو چه نرم افزاری(چه مفسری) باید اجرا کنه چون ما اسکریپت bash مینویسیم باید به صورت زیر باشه :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
2 تا کاراکتر #! و بلافاصله مسیر مفسر bash و در صورت نیاز آرگومانهایی که باید به مفسر فرستاده بشند.شی بنگ رو میشه به صورت دیگری هم نوشت که دیگه وارد جزییات نمیشم.
تو 2 خط بعدی 2 متغیر تعریف شدند.یه متغیر رشته ای به نام logfile و یه متغیر عددی به نام bash_ver.برای تعریف متغیر عددی bash_ver از دستوری به نام let پیش از نام متغیر استفاده کرده ام.بدون let هم این تعریف درست عمل میکند.پس چرا از let استفاده کرده ام.اگر در محاسبه مقدار عددی هر اشتباهی صورت گیرد متغیر bash_ver با وجود let با صفر مقداردهی میشود.اما اگر let نبود در صورت بروز اشتباه bash_ver تبدیل به یک متغیر رشته ای میشد که باعث بروز اشتباه در دستور خط بعد آن میشد.دستور let جلوی تبدیل متغیر را میگیرد و تضمین میکن bash_ver عدد خواهد بود.ضمنا با وجود let میتوان از برخی عبارات محاسباتی مستقیما استفاده کرد.
برای تعریف متغیرهای رشته ای(در اینجا logfile) ترجیحا از علامت نقل قول(double quato) یا single quato باید استفاده کرد.
در انتساب به مغیرها بعد از علامت تساوی نباید خط فاصله باشد.در انتساب عددی bash_ver بلافاصله بعد از علامت تساوی علامت $ را میبینیم.علامت $ یعنی متغیری وجود دارد که میخواهیم به مقدار آن دست پیدا کنیم.این متغیر {BASH_VERSINFO[0]} میباشد.اما این چه متغیری است؟.(علامتهای {} جزو نام متغیر نمیباشند و در بسیاری موارد اختیاری میباشند اما شما همیشه از آکولاد استفاده کنید)
یا خود ما متغیرها را تعریف و استفاده میکنیم یا متغیرهایی از قبل وجود دارند که ما از مقادیر آنها بهره میبریم.bash آرایه ای به نام BASH_VERSINFO دارد که اطلاعات نسخه آن را ذخیره میکند.عنصر اول آرایه(همان عنصر 0) شماره ورژن اصلی را در خود دارد.یعنی ما با این دستور انتساب شماره ورژن اصلی bash را در متغیر bash_ver قرار میدهیم.
در پایان خط دستور انتساب عددی داریم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب علامت < یک ریدایرکتور است.بدین معنی که خروجی و حاصل عبارت سمت چپ خود را به دستور و یا عبارت سمت راست منتقل میکند.کلیه خروجی ایجاد شده دستور انتساب سمت راست ریدایرکتور به device بخصوصی به نام null میریزد.null یعنی هیچی یعنی خروجی مورد نظر را نابود کن.من با قرار دادن این ریدایرکتور به null در انتهای دستور میخواهم در صورت بروز اشتباه هیچ خروجی روی صفحه نمایش دیده نشود.علامت & معنی به خصوصی دارد که بایستی با مقدمات لازمی توضیح دهم.ما ۳ device بخصوص داریم به نامهای stdin یا ورودی استاندارد که با عدد صفر مشخص میشود.stdout یا خروجی استاندارد که با عدد 1 مشخص میشود و stderr یا اشتباه استاندارد که با عدد 2 مشخص میشود.با ریدایرکتورها میتوان این ورودیها و خروجیها را که دستورات تولید میکنند منتقل کرد.
ورودی استاندارد معمولا صفحه کلید است اما میتواند یک سخت افزار ورودی دیگر یا حتی خروجی یک دستور دیگر یا محتویات فایل باشد.خروجی استاندارد معمولا صفحه نمایش است.مثلا وقتی دستوری تایپ میکنیم نتیجه آن را در صفحه نمایش میبینیم.ممکن است خروجی استاندارد نیز تغییرکند.اشتباه استاندارد نیز معمولا به صفحه نمیش یا log فایلها متصل میشود.
علامت & چسبیده به ریدایرکتور < یعنی تمام این خروجی ها فرستاده شود.به جای & میتوان از اعداد 1 یا 2 استفاده کرد.2 یعنی خروجی خطا و 1 یعنی خروجی معمولی(استاندارد)
خوب در خط 4 تا 7 یه دستور شرطی ساده داریم. دستور if یعنی اگر،یک خط فاصله و سپس دستور ] و سپس یک خط فاصله بعد از اون کل عبارتی که باید محاسبه بشه یک فاصله علامت [ سپس بلافاصله علامت ; دستور then به معنی سپس، عباراتی که در صورت درست بودن شرط if اجرا میشند ود در نهایت با دستور fi دستور پایان میپذیرد.عبارتی که در دستور if درستی یا نادرستی اون برسی میشه یک مقایسه عددی هست به صورت زیر :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر bash_ver که ایجاد کردیم در اینجا با یه علامت $ که اولش اومده جایگزین میشه یه عملگر به صورت lt- بررسی میکنه که مقدار این متغیر کوچکتر از 4 هست یا نه.lt مخفف lesser then به معنی کوچکتر از میباشد.
اگر مقدار مقدار متغیر bash_ver کوچکتر از 4 باشد دستورات پس از then اجرا میشند.در غیر اینصورت مفسر از روی این دستورات پرش میکنه و به خط 8 میره.به طور خلاصه این دستور if برسی میکنه اگر ورژن bash قدیمیتر از ورژن 4 باشه یک پیغام خطا چاپ کنه و به اجرای اسکریپت خاتمه بده در غیر اینصورت اسکریپت به اجرای معمول خودش ادامه بده.
دستورات شرطی ابزار تصمیم گیری و تغییر جهت اجرای برنامه هستند و از مهمترین ابزارهای اسکریپت نویسی هستند.در واقع منطق اسکریپت رو مشخص میکنن.
ادامه دارد ....
اول باید بگم این آموزش برای کاربران لینوکسه.کاربران ویندوز نمیتونند با این آموزش ارتباط برقرار کنن.(منظورم سیستم عامل کامپیوتر شما نیست طرز فکر شماست)
در اهمیت اسکریپت نویسی همین قدر بگم که اکثر لینوکس سرورها اصلا محیط دسکتاپ ندارند و مدیران از خط فرمان و معمولا اسکریپتها اونها رو اداره میکنند.
پیشنیاز دنبال کردن این تاپیک اینه که شما باید بتونید جملات ساده انگلیسی رو ترجمه و درک کنید(کاربران لینوکس مسلما میتونند)
خوب بهترین راه برا آموزش دنبال کردن خط به خط یه اسکریپت ساده است.اسکریپت زیر در سیستم من برای دانلود شبانه استفاده میشه(اعداد شماره خط رو بیان میکنن و جزء اسکریپت نیستند) :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط اول رو بهش میگن شی بنگ shebang
به مفسر میگه این فایل اسکریپت رو چه نرم افزاری(چه مفسری) باید اجرا کنه چون ما اسکریپت bash مینویسیم باید به صورت زیر باشه :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
2 تا کاراکتر #! و بلافاصله مسیر مفسر bash و در صورت نیاز آرگومانهایی که باید به مفسر فرستاده بشند.شی بنگ رو میشه به صورت دیگری هم نوشت که دیگه وارد جزییات نمیشم.
تو 2 خط بعدی 2 متغیر تعریف شدند.یه متغیر رشته ای به نام logfile و یه متغیر عددی به نام bash_ver.برای تعریف متغیر عددی bash_ver از دستوری به نام let پیش از نام متغیر استفاده کرده ام.بدون let هم این تعریف درست عمل میکند.پس چرا از let استفاده کرده ام.اگر در محاسبه مقدار عددی هر اشتباهی صورت گیرد متغیر bash_ver با وجود let با صفر مقداردهی میشود.اما اگر let نبود در صورت بروز اشتباه bash_ver تبدیل به یک متغیر رشته ای میشد که باعث بروز اشتباه در دستور خط بعد آن میشد.دستور let جلوی تبدیل متغیر را میگیرد و تضمین میکن bash_ver عدد خواهد بود.ضمنا با وجود let میتوان از برخی عبارات محاسباتی مستقیما استفاده کرد.
برای تعریف متغیرهای رشته ای(در اینجا logfile) ترجیحا از علامت نقل قول(double quato) یا single quato باید استفاده کرد.
در انتساب به مغیرها بعد از علامت تساوی نباید خط فاصله باشد.در انتساب عددی bash_ver بلافاصله بعد از علامت تساوی علامت $ را میبینیم.علامت $ یعنی متغیری وجود دارد که میخواهیم به مقدار آن دست پیدا کنیم.این متغیر {BASH_VERSINFO[0]} میباشد.اما این چه متغیری است؟.(علامتهای {} جزو نام متغیر نمیباشند و در بسیاری موارد اختیاری میباشند اما شما همیشه از آکولاد استفاده کنید)
یا خود ما متغیرها را تعریف و استفاده میکنیم یا متغیرهایی از قبل وجود دارند که ما از مقادیر آنها بهره میبریم.bash آرایه ای به نام BASH_VERSINFO دارد که اطلاعات نسخه آن را ذخیره میکند.عنصر اول آرایه(همان عنصر 0) شماره ورژن اصلی را در خود دارد.یعنی ما با این دستور انتساب شماره ورژن اصلی bash را در متغیر bash_ver قرار میدهیم.
در پایان خط دستور انتساب عددی داریم
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب علامت < یک ریدایرکتور است.بدین معنی که خروجی و حاصل عبارت سمت چپ خود را به دستور و یا عبارت سمت راست منتقل میکند.کلیه خروجی ایجاد شده دستور انتساب سمت راست ریدایرکتور به device بخصوصی به نام null میریزد.null یعنی هیچی یعنی خروجی مورد نظر را نابود کن.من با قرار دادن این ریدایرکتور به null در انتهای دستور میخواهم در صورت بروز اشتباه هیچ خروجی روی صفحه نمایش دیده نشود.علامت & معنی به خصوصی دارد که بایستی با مقدمات لازمی توضیح دهم.ما ۳ device بخصوص داریم به نامهای stdin یا ورودی استاندارد که با عدد صفر مشخص میشود.stdout یا خروجی استاندارد که با عدد 1 مشخص میشود و stderr یا اشتباه استاندارد که با عدد 2 مشخص میشود.با ریدایرکتورها میتوان این ورودیها و خروجیها را که دستورات تولید میکنند منتقل کرد.
ورودی استاندارد معمولا صفحه کلید است اما میتواند یک سخت افزار ورودی دیگر یا حتی خروجی یک دستور دیگر یا محتویات فایل باشد.خروجی استاندارد معمولا صفحه نمایش است.مثلا وقتی دستوری تایپ میکنیم نتیجه آن را در صفحه نمایش میبینیم.ممکن است خروجی استاندارد نیز تغییرکند.اشتباه استاندارد نیز معمولا به صفحه نمیش یا log فایلها متصل میشود.
علامت & چسبیده به ریدایرکتور < یعنی تمام این خروجی ها فرستاده شود.به جای & میتوان از اعداد 1 یا 2 استفاده کرد.2 یعنی خروجی خطا و 1 یعنی خروجی معمولی(استاندارد)
خوب در خط 4 تا 7 یه دستور شرطی ساده داریم. دستور if یعنی اگر،یک خط فاصله و سپس دستور ] و سپس یک خط فاصله بعد از اون کل عبارتی که باید محاسبه بشه یک فاصله علامت [ سپس بلافاصله علامت ; دستور then به معنی سپس، عباراتی که در صورت درست بودن شرط if اجرا میشند ود در نهایت با دستور fi دستور پایان میپذیرد.عبارتی که در دستور if درستی یا نادرستی اون برسی میشه یک مقایسه عددی هست به صورت زیر :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متغیر bash_ver که ایجاد کردیم در اینجا با یه علامت $ که اولش اومده جایگزین میشه یه عملگر به صورت lt- بررسی میکنه که مقدار این متغیر کوچکتر از 4 هست یا نه.lt مخفف lesser then به معنی کوچکتر از میباشد.
اگر مقدار مقدار متغیر bash_ver کوچکتر از 4 باشد دستورات پس از then اجرا میشند.در غیر اینصورت مفسر از روی این دستورات پرش میکنه و به خط 8 میره.به طور خلاصه این دستور if برسی میکنه اگر ورژن bash قدیمیتر از ورژن 4 باشه یک پیغام خطا چاپ کنه و به اجرای اسکریپت خاتمه بده در غیر اینصورت اسکریپت به اجرای معمول خودش ادامه بده.
دستورات شرطی ابزار تصمیم گیری و تغییر جهت اجرای برنامه هستند و از مهمترین ابزارهای اسکریپت نویسی هستند.در واقع منطق اسکریپت رو مشخص میکنن.
ادامه دارد ....