حالا میخوام خطوط 5 و 6 رو که عبارات داخل دستور شرطی if هستند برسی کنم.
خط 6 به صورت زیره :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور exit باعث خروج فوری از اسکریپت میشه هر جایی که باشه.عددی که به عنوان آرگومان به دستور exit فرستاده شده در واقع متغیر ERRORLEVEL رو تنظیم میکنه.موقع برگشت از یک برنامه یا اسکریپت به محیط والد اون برنامه(در اینجا ترمینال bash) این مقدار نشاندهنده وضعیت اجرای برنامه میباشد.این مقدار میتواند از 0 تا 255 تنظیم شود.بنا به قرارداد مقدار صفر به معنای پایان موفقیت آمیز و بدون مشکل اسکریپت است.و هر عددی جز آن نشاندهنده مشکل یا اروری در اجرای عادی برنامه است.ما در اسکریپتهایی که مینویسیم خیلی اوقات مقدار بازگشتی این متغیر را در یک دستور شرطی برسی میکنیم.در آینده این مورد را مشاهده خواهید کرد.اعداد 1 تا 127 معمولا برای ارورهای مهم و اعداد 128 تا 255 برای ارورهای غیر مهم یا حتی warning ها میتواند مورد استفاده قرار گیرد.
اگر هیچ عددی جلوی exit نوشته نشود به صورت پیشفرض ERRORLEVEL روی صفر تنظیم میشود.
حالا دقیقا به خط 5 نگاه کنید که توضیح نسبتا مفصلی دارد :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور echo دستور ساده ایه که برای نشان دادن وضعیت اجرای اسکریپت استفاده میشه.به طور کلی هر دستوری میتونه همراه آپشنهای متنوعی که پشتیبانی میکنه فراخوانی بشه در اینجا دستور echo با آپشن e- و آرگومان اون که یک رشته کاراکتری(داخل کوتیشن) هست استفاده شده.آپشن e- برای اینه که دستور echo بتونه کاراکتر گریز رو تفسیر کنه.کاراکتر گریز(یا توالی گریز) در این خط t\ هست که به معنای کاراکتر Tab میباشد.یعنی echo با مشاهده t\ آنرا با کاراکتر Tab جایگزین میکند.(یعنی به جای t\ کاراکتر Tab را چاپ میکند) به طور کلی از کاراکتر backslash برای ایجاد توالی های گریز استفاده میشه.این توالی های گریز استفاده گسترده ای دارند.به عنوان مثال من تو ترمینال به فارسی تایپ کردم 'سلام'، خروجی اون رو مشاهده کنید :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
bash این کلمه فارسی رو به صورت توالی های گریز مشاهده میکنه و پردازش میکنه.
به طور کلی از توالی های گریز به 2 علت استفاده میشه :
1- نمایش(استفاده از) کاراکترهایی که معمولا نمیشه اونها رو تایپ کرد مثل کاراکتر خط جدید(n\)
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
2-نمایش کاراکترهایی که قراردادن آنها در یک رشته در حالت عادی نا ممکنه.مثلا ما یک رشته رو داخل یک جفت علامت کوتیشن نمایش میدهیم.حالا اگر بخوایم از علامت کوتیشن داخل رشته استفاده کنیم باید اون رو با بک اسلش به شکل کاراکتر گریز دربیاریم وگرنه با مشکل مواجه میشیم.یه مثال دیگه اگر بخواهیم یه فایل یا مسیری که دارای کاراکتر فاصله هست رو به عنوان آرگومان به یه دستور بفرستیم یا باید اونو کلا داخل علامت کوتیشن قرار بدیم یا قبل از کاراکتر فاصله از بک اسلش استفاده کنیم تا اونو به توالی گریز تبدیل کنیم.یک مثال خیلی مهم دیگه کاراکتر $ هست که در bash معنی خاصی داره(برای دسترسی به مقدار یک متغیر استفاده میشه) حالا اگر بخوایم خود کاراکتر $ رو در یک رشته نمایش بدیم قبلش کاراکتر بک اسلش قرار میدیم.
در دستور echo هر وقت از توالی های گریز استفاده میکنیم جهت پردازش اونها باید آپشن e- را بکار ببریم.
ابتدای رشته درست بعد از علامت کوتیشن عبارت زیر نوشته شده :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
date یه دستور ساده برای نمایش یا تنظیم تاریخ و زمان در خط فرمانه.شما میتونید فرمی رو که میخواید زمان نمایش داده بشه با یه رشته FORMAT خاص خودتون به همین صورت بالا جلوی date وارد کنید.علامت + و داخل یک جفت کوتیشن فرمت مورد نظرتون.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای بدست آوردن اطلاعات راجع به یه دستور میتونید نام اون دستور رو به دستور man بدید و اطلاعات راهنمای اون دستور رو دریافت کنید.مثلا برای دستور date تو ترمینال تایپ کنید : man date
متوجه شدید که خروجی دستور date یه رشته کاراکتریه که تاریخ وزمان رو به فرمتی که میخوایم نمایش میده.حالا اون ۲ تا کاراکتر `` در اطراف دستور مال چیه؟ ما میخوایم یه رشته رو چاپ کنیم و هیچ چیزی جز کاراکترهای رشته ای نمیتونه به دستور echo ارسال بشه.وجود کاراکترهای `` اطراف دستور date سبب میشه bash قبل از اونکه آرگومان رشته ای رو به دستور echo بفرسته اون رو پردازش کنه و پس از اجرای دستور date در پس زمینه خروجی اون رو جایگزین دستور date کنه.اگر `` اطراف دستور date نبود به جای نوشتن خروجی دستور date در خروجی خود عبارت دستور به عنوان رشته چاپ میشد.
پس از کوتیشن پایان دهنده رشته دستور echo پایان میپذیرد(قبل از کاراکتر | ).این علامت | به عنوان pipe یا لوله شناخته میشود.لوله خروجی یک دستور را به عنوان آرگومان به دستور پس از خود میفرستد.فقط توجه داشته باشی که لوله را با ریدایرکتور که قبلا با آن آشنا شدید اشتباه نکنید.ریدایرکتورها خروجی یک سمت را به device یا فایل یا FIFO سمت دیگر میفرستند.در حالیکه لوله فرمان بعد از خود را با خروجی قبل از خود به عنوان آرگومان اجرا میکند.به تدریج معنی این کلمات رو متوجه خواهید شد.
دستور tee همزمان رشته مورد نظر را روی 2 خروجی استاندارد نمایش میدهد.در اینجا دستور tee خروجی را همزمان که روی صفحه نمایش نشان میدهد در یک فایل log که ما قبلا مسیر آنرا به عنوان متغیر تعریف کرده ایم اضافه میکند.به نحوه استفاده از متغیر logfile که در ابتدای اسکریپت تعریف کرده ایم توجه کنید.دستور tee در اینجا یک آپشن a- دارد که به معنی append یا الحاق میباشد.این آپشن به دستور tee میگوید رشته مورد نظر را به انتهای فایل الحاق کند.اگر آپشن a- نبود فایل با رشته مورد نظر رونویسی میشد و محتویات قبلی آن از بین میرفت.
مهم نیست که فایل از قبل وجد داشته باشد یا نه.اگر فایل وجود نداشته باشد tee آنرا ایجاد میکند.
لوله خروجی رشته ای دستور echo را به عنوان آرگومان به دستور tee میفرستد و دستور tee علاوه بر نمایش آن در ترمینال آنرا در فایل logfile مینویسد. معنی آخر این خط نیز مشخص است.<2 به معنی خروجی خطا میباشد.یعنی اگر خطایی در اجرای دستور tee اتفاق افتاد خروجی خطا را دور بریز(نمایش نده)
البته توجه داشته باشید که دستور tee و بسیاری از دستورات دیگه از لوله پشتیبانی میکنند و اگر دستوری از لوله پشتیبانی نکنه هم میشه از لوله استفاده کرد(با دستور xargs) که در آینده احتمالا به این مورد هم میپردازم.
...