در قسمت قبلی درباره قوانین و دستورالعمل های اسکریپت نویسی برای بش صحبت کردیم و یاد گرفتیم که در اول هر اسکریپت باید با استفاده از hash bang و آدرس دادن بش یا هر شل دیگر اسکریپت را اجرا کنیم. همچنین دانشتیم که به وسیله # خط ها تبدیل به کامنت میشوند و همچنین با پرمیشن دادن و اجرا کردن فایلهای اسکریپت آشنا شدیم. در این قسمت میخواهیم اولین اسکریپت خود را بنویسیم.
اولین اسکریپت
بیایید این کار را با نوشتن یک اسکریپت شروع کنیم که به شما اجازه میدهد تا فایل هایتان را کپی کرده و به آخر اسم آنها تاریخ اضافه کنید. اسم آن را datecp میگذاریم. ابتدا بررسی میکنیم که این اسم با دیگر برنامهها و دستورات موجود در سیستم تداخلی نداشته باشد.
در عکس بالا میبینید که خروجی برای دستور which datecp خالی است و میتوانید با خیال راحت از این اسم استفاده کنیم.
حال میخواهیم یک فایل خالی در مسیر ~/bin/datecp ایجاد کنیم. دستور زیر را وارد میکنیم.
Touch ~/bin/datecp
و بهتراست که دسترسی ها را همین الان تصحیح کنیم. ممکن است بعداً فراموش شوند :
پس از آن میخواهیم در فایل خود کامنتی بگذاریم و در آن در مورد اسکریپتی که نوشتهایم توضیح داده و بگوییم که این اسکیرپت دقیقاً چکار میکند.
حال بیایید یک متغیر تعریف کنیم. اگر قبلاً درس جبر داشته باشید میدانید که متغیرها چیستند و چکار میکنند. یک متغیر به ما اجازه میدهد که به وسیله آن اطلاعاتی جمع آوری کرده و کاری مشخص انجام دهیم. متغیر ها همچنین میتوانند به هرجایی بسط داده شوند. این بدان معنی است که با نمایش اسم آنها میتوان محتویات آنها را هم مشاهده کرد و پس از آن نیز میتوانید یک مقدار جدید را به متغیر قبلی نسیت داد.
ما چه متغیر هایی را باید در اسکریپت خود استفاده کنیم؟ خب بیایید تاریخ و ساعت را در اسکریپت وارد کنیم برای اینکار ما باید دستور date را فراخوانی کنیم. به عکس زیر نگاهی بیاندازید تا متوجه شوید که چگونه میتوان یک خروجی از دستور date را ساخت.
شما میتوانید با اضافه کردن گزینه های دیگر نیز دستور خود را تکمیل کنید. ابتدای هر موردی که میخواهید اضافه کنید یک % قرار دهید. برای اطلاعات بیشتر نیز میتوانید صفحه manual دستور date را مشاهده کنید.
ما از این دستور استفاده میکنیم و آن را در اسکریپت خود مینویسیم :
date +%m_%d_%y-%H.%M.%S
حال اگر اسکریپت خود را ذخیره کنیم و آن را اجرا کنیم دقیقاً همان چیزی را خواهیم دید که تنظیم کردهایم.
با این حال بیایید یک متغیر بسازیم و دستور خود را در آن جای دهیم. سینتکس دقیق آن به صورت زیر است:
variable=$(command –options arguments)
و برای ما مانند زیر میشود :
date_formatted=$(date +%m_%d_%y-%H.%M.%S)
این چیزی است که ما به آن میگوییم جایگزینی دستور و با آن میتوانیم بگوییم که چه موقع این دستور اجرا شود و دستور بین پرانتزها را اجزا کنید. هرموقع که میخواهید آن را نمایش دهید باید اسم متغیر را در دستورات وارد کنید. در زیر میتوانید یک مثال و خروجی را مشاهده کنید.
توجه کنید که در خروجی دو space داریم یکی به همراه دستور echo و دیگری با متغیر که هر دو نیز نمایش داده میشوند. از اسپیس ها و فضای خالی استفاده نکنید اگر آنها را نیاز ندارید. و همچنین توجه داشته باشید که بدون خط echo خروجی خاصی نخواهیم داشت.
برویم به سراغ اسکریپتمان ؛ میخواهیم دستور کپی را نیز به آن اضافه کنیم. از دستوری شبیه به این استفاده خواهیم کرد :
cp –iv $1 $2.$date_formatted
این دستور کپی کردن به همراه آپشن های I و v است همچنین از شما سؤال خواهید شد قبل از اینکه یک فایل را دوباره بنویسید. پس از آن تغییرات نمایش داده خواهند شد. پس از آن گزینه ای میبینید که به شکل $۱ است. علامت دلار به همراه عدد به معنی شماره اسکریپت است. برای مثال در زیر اولین دستور trogdor2.mp3 و آرگومنت دوم ringtone.mp3 است .
cp –iv Trogdor2.mp3 ringtone.mp3
اگر به اسکریپت قبلی نگاه کنیم میبینیم که به دو آرگومان آدرس داده ایم.
این بدان معنی است که هرگاه اسکریپت اجرا شود نیاز دارد تا دو آرگومان قبلی به درستی اجرا شود. اولین دلار مراقب اجرای درست دستور کپی و دومین آن مربوط به تغییر اسم فایل است که هر دو را چک میکنیم. در زیر آتفاقی که پس از اجرای اسکریپت خواهد افتاد نمایش داده شده است. خروجی به دلیل استفاده از $۲ نمایش داده شده است.
به نظر میرسد آموزش ما در اینجا به پایان رسیده است. میتوانید با چیز هایی که یاد گرفتهاید کمی تفریح کنید و اسکریپت های جالبی را بنویسید.
سلام
سایت خیلی فوق العاده ای دارید :)) به شخصه که تو بوک مارکم جا دارید D:
ولی یه انتقادی که دارم اینه که اموزش هاتون مداوم و کامل نیست ، قشنگ چند جا چند تا اموزش رو شروع کردید ولی همون اوایل رهاش کردید ، به نظرم یه سری کامل بهتر از چند تا سری اموزش ناقص هست .
با تچکر 🙂
سلام
خوشحالم که سایت ما براتون یک سایت مفید و آموزنده بوده
سعی میکنم آموزش هایی که میگذارم رو به اتمام برسونم اما گاهی اوقات و به دلیل برخی دلایل مجبور میشم یک آموزش رو رها کنم و دیگه ادامش ندم
برخی اوقات هم آموزش ها ازش استقبال نمیشه و یا حتی دوستان از اونها سر در نمیارن (مثل آموزش کلاسترینگ) به همین دلیل تا درخواست نشده ادامشو ننوشتم.