گنو/لینوکس

راهنمای مبتدی اسکریپت نویسی Shell (بخش ۳)

نوشته شده توسط اروند طباطبایی

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

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

بیایید این کار را با نوشتن یک اسکریپت شروع کنیم که به شما اجازه میدهد تا فایل هایتان را کپی کرده و به آخر اسم آن‌ها تاریخ اضافه کنید. اسم آن را datecp میگذاریم. ابتدا بررسی میکنیم که این اسم با دیگر برنامه‌ها و دستورات موجود در سیستم تداخلی نداشته باشد.

323x175xwhich-cp.png.pagespeed.ic.pzAF6yjTtU
در عکس بالا میبینید که خروجی برای دستور which datecp خالی است و میتوانید با خیال راحت از این اسم استفاده کنیم.

حال میخواهیم یک فایل خالی در مسیر ~/bin/datecp ایجاد کنیم. دستور زیر را وارد میکنیم.

Touch ~/bin/datecp

646x350xtouch.png.pagespeed.ic.YczdXybB2t
و بهتراست که دسترسی ها را همین الان تصحیح کنیم. ممکن است بعداً فراموش شوند :

334x82xchmod.png.pagespeed.ic.TYBbXHGG2m
پس از آن میخواهیم در فایل خود کامنتی بگذاریم و در آن در مورد اسکریپتی که نوشته‌ایم توضیح داده و بگوییم که این اسکیرپت دقیقاً چکار میکند.

646x350xhashbang-hack.png.pagespeed.ic.3COWo0XImb
حال بیایید یک متغیر تعریف کنیم. اگر قبلاً درس جبر داشته باشید میدانید که متغیرها چیستند و چکار میکنند. یک متغیر به ما اجازه میدهد که به وسیله آن اطلاعاتی جمع آوری کرده و کاری مشخص انجام دهیم. متغیر ها همچنین میتوانند به هرجایی بسط داده شوند. این بدان معنی است که با نمایش اسم آن‌ها میتوان محتویات آن‌ها را هم مشاهده کرد و پس از آن نیز میتوانید یک مقدار جدید را به متغیر قبلی نسیت داد.

ما چه متغیر هایی را باید در اسکریپت خود استفاده کنیم؟ خب بیایید تاریخ و ساعت را در اسکریپت وارد کنیم برای اینکار ما باید دستور date را فراخوانی کنیم. به عکس زیر نگاهی بیاندازید تا متوجه شوید که چگونه میتوان یک خروجی از دستور date را ساخت.

540x360xdate-output.png.pagespeed.ic.pGnT8rLIcX

شما میتوانید با اضافه کردن گزینه های دیگر نیز دستور خود را تکمیل کنید. ابتدای هر موردی که میخواهید اضافه کنید یک % قرار دهید. برای اطلاعات بیشتر نیز میتوانید صفحه manual دستور date را مشاهده کنید.

ما از این دستور استفاده میکنیم و آن را در اسکریپت خود مینویسیم :

date +%m_%d_%y-%H.%M.%S

646x350xdate-in-script.png.pagespeed.ic.Ao85axHTaL

حال اگر اسکریپت خود را ذخیره کنیم و آن را اجرا کنیم دقیقاً همان چیزی را خواهیم دید که تنظیم کرده‌ایم.

339x171xdate-script-output.png.pagespeed.ic.eY7FroPp1u

با این حال بیایید یک متغیر بسازیم و دستور خود را در آن جای دهیم. سینتکس دقیق آن به صورت زیر است:

variable=$(command –options arguments)

 

و برای ما مانند زیر می‌شود :

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

646x350xdate-as-variable.png.pagespeed.ic.24Gc6cflxi

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

646x350xecho-date-script.png.pagespeed.ic.gLutD6BRPb

402x107xecho-date-output.png.pagespeed.ic.lYdXsF8BP9
توجه کنید که در خروجی دو space داریم یکی به همراه دستور echo و دیگری با متغیر که هر دو نیز نمایش داده میشوند. از اسپیس ها و فضای خالی استفاده نکنید اگر آن‌ها را نیاز ندارید. و همچنین توجه داشته باشید که بدون خط echo خروجی خاصی نخواهیم داشت.

برویم به سراغ اسکریپتمان ؛ میخواهیم دستور کپی را نیز به آن اضافه کنیم. از دستوری شبیه به این استفاده خواهیم کرد :

cp –iv $1 $2.$date_formatted

646x350xappended-filename.png.pagespeed.ic.xYjLr0xpSS

این دستور کپی کردن به همراه آپشن های I و v است همچنین از شما سؤال خواهید شد قبل از اینکه یک فایل را دوباره بنویسید. پس از آن تغییرات نمایش داده خواهند شد. پس از آن گزینه ای میبینید که به شکل $۱ است. علامت دلار به همراه عدد به معنی شماره اسکریپت است. برای مثال در زیر اولین دستور trogdor2.mp3 و آرگومنت دوم ringtone.mp3 است .

cp –iv Trogdor2.mp3 ringtone.mp3

510x78xappended-filename1.png.pagespeed.ic.KUW3ytEqXu

اگر به اسکریپت قبلی نگاه کنیم میبینیم که به دو آرگومان آدرس داده ایم.

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

646x350xappended-filename-output.png.pagespeed.ic.YJRdyKx8uC

به نظر میرسد آموزش ما در اینجا به پایان رسیده است. میتوانید با چیز هایی که یاد گرفته‌اید کمی تفریح کنید و اسکریپت های جالبی را بنویسید.

درباره نویسنده

اروند طباطبایی

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

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه

  • سلام
    سایت خیلی فوق العاده ای دارید :)) به شخصه که تو بوک مارکم جا دارید D:
    ولی یه انتقادی که دارم اینه که اموزش هاتون مداوم و کامل نیست ، قشنگ چند جا چند تا اموزش رو شروع کردید ولی همون اوایل رهاش کردید ، به نظرم یه سری کامل بهتر از چند تا سری اموزش ناقص هست .
    با تچکر 🙂

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