جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
محتوای باز
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]
  • خانه
  • کتاب آنلاین
  • درباره سایت
  • درباره لوگو
  • تماس با ما
محتوای باز
  • صفحه اصلی
  • دوره‌های آموزشی
  • وبلاگ
  • درباره ما
  • قوانین و مقررات
  • همکاری با ما
  • تماس با ما
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0
[wcas-search-form]

نوشتن اولین اسکریپت در خط فرمان لینوکس

13 دی 1403
ارسال شده توسط فرشید نوتاش حقیقت
خط فرمان، گنو/لینوکس

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

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

اسکریپ‌های شل (Shell Scripts) چه هستند؟

به ساده‌ترین عبارت یک اسکریپت شل (Shell Script) مجموعه‌ای از دستورات خط فرمان است که در داخل یک فایل ذخیره شده‌اند. شل فرمان‌های موجود در فایل را می‌خواند و به همان صورت که فرمان‌ها را مستقیما در خط فرمان وارد می‌کردیم شل آن‌ها را اجرا می‌کند. شل از نظری خط فرمانی متمایز به شمار می‌آید. از چه نظر؟ از این نظر که هم یک خط فرمان قدرتمند برای سیستم است و هم مفسری قدرتمند برای زبان‌های اسکریپت‌نویسی است. همانگونه که خواهیم دید اکثر کارهایی را که می‌توان به صورت مستقیم در خط فرمان انجام داد در داخل فایل‌های اسکریپت نیز قابل انجام هستند.

ما تا اینجا نکات زیادی از شل (Shell) را پوشش داده‌ایم ولی تاکنون بر روی ویژگی‌هایی تمرکز کرده بودیم که بیشتر به صورت دستوراتی مستقیم در خط فرمان به کار می‌روند. علاوه بر فرامین مستقیم، شل (Shell) مجموعه‌ای از ویژگی‌ها را دارد که به منظور نوشتن برنامه‌ها به کار می‌رود.

چگونه یک اسکریپت شل بنویسیم؟

به منظور ایجاد موفقیت‌آمیز یک اسکریپت شل و اجرای آن در خط فرمان سه مرحله وجود دارد:

مرحله اول) یک اسکریپت بنویسید. اسکریپت‌های شل (Shell Scripts) فایل‌های متنی عادی هستند. در نتیجه به منظور نوشتن یکی از آن‌ها ما نیاز به یک ویرایشگر ساده متن داریم بهترین ویرایشگرهای متن ویژگی‌های مثل هایلایت کردن سینتکس‌ها اجازه به دیدن کدها با رنگهای مختلف و… را فراهم می‌کنند هایلایت کردن سینتکس‌های که به شما کمک خواهد کرد که برخی مناطق کد که دارای خطا هستند را برجسته و مشخص کنید ویرایشگرهای kate ، gedit ،  vim و بسیاری دیگر از ویرایشگرهای موجود گزینه‌هایی مناسب برای نوشتن فایل‌های اسکریپت دارند.

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

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

فرمت دهی فایل اسکریپت

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

#!/bin/bash
# This is our first script.
echo 'Hello World!'

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

ولی خط اول چطور؟ آیا آن هم یک کامنت است؟ خیر. کاراکتر را یک توالی Shebang می‌نامند. توالی شیبنگ استفاده می‌شود تا به سیستم بگوید که نام مفسری که باید برای اجرای فایل اسکریپت استفاده کند چیست. هر اسکریپت شل (Shell) بایستی حاوی این خط در ابتدای آن باشد. پس از پایان فایل را با نام دلخواه ذخیره کنید و از ویرایشگر خارج شوید.

مجوزهای اجرایی

دومین کاری که بایستی برای ایجاد یک اسکریپت ساده انجام دهیم این است که قابل اسکریپت خود را اجرایی کنیم. به این منظور بایستی مجوزهای فایل اسکریپت را تغییر دهیم. حدس بزنید. کمی فکر کنید. با چه دستوری مجوزها را تغییر می‌دادیم. این را با فرمان chmod به صورت زیر انجام دهید:

[me@linuxbox ~]$ ls -l hello_world
-rw-r--r-- 1 me me 63 2012-03-07 10:10 hello_world
[me@linuxbox ~]$ chmod 755 hello_world
[me@linuxbox ~]$ ls -l hello_world
-rwxr-xr-x 1 me me 63 2012-03-07 10:10 hello_world

در ابتدا با استفاده از فرمان ls -l ما مجوزهای دسترسی قابل اسکریپت hello_world که قبل‌تر آن را ایجاد کردیم را مشاهده می کنیم. سپس با استفاده از فرمان chmal مجوزهای فایل را به ۷۵5 تغییر می‌دهیم. چرا ۷۵۵؟ دو نوع مجوز رایج برای اسکریپت ها وجود دارد. چون ۷۵۵ برای اسکریپت‌هایی است که همه قادر به اجرای آن‌ها باشند و مجوز ۷۰۰ برای اسکریپت‌هایی که فقط مالک و صاحب فایل قادر به اجرای آن‌ها باشد. همچنین به یاد داشته باشید که اسکریپت‌ها به منظور اجرا شدن بایستی خواندنی نیز باشند. در نهایت باز هم با فرمان ls -l ما مجوزهای فایل را مشاهده می‌کنیم که تغییر کرده و علاوه بر آن به رنگ فایل دقت کنید که به صورتی متمایز نمایش داده می‌شود.

موقعیت و مکان فایل اسکریپت

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

[me@linuxbox ~]$ ./hello_world
Hello World!

اگر به این شیوه عمل نکنیم با خطای زیر مواجه می‌شویم:

[me@linuxbox ~]$ hello_world
bash: hello_world: command not found

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

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

به صورت خلاصه سیستم هر بار که نیاز به پیدا کردن یک برنامه اجرایی پیدا می‌کند در صورتی که هیچ مسیر مشخصی تعیین نشده باشد یک لیست از دایرکتوری‌ها را جستجو می‌کند. این شیوه‌ای است که سیستم می‌داند چگونه به هنگام نوشتن فرمان ls آن  را از مسیر /bin/ls اجرا کند. دایرکتوری bin یکی از دایرکتوری‌هایی است که سیستم به صورت خودکار آن را جستجو می‌کند.

لیست دایرکتوری‌ها درون یک متغیر محیطی با نام PATH نگهداری می‌شود. متغیر PATH حاوی یک لیست از دایرکتوری‌ها برای جستجو است که با علامت نقل قول (:) از هم جدا شده‌اند. می‌‎توانیم محتویات متغیر PATH را با فرمان echo مشاهده کنیم:

[me@linuxbox ~]$ echo $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

در اینجا لیستی از دایرکتوری‌ها را می‌بینیم. اگر که اسکریپت ایجاد شده توسط ما هم در این مکان قرار داشت مشکل ما نیز برطرف می‌شد. اکثر توزیع‌های گنو/لینوکس متغیر PATH را به گونه‌ای پیکربندی می‌کنند که حاوی دایرکتوری bin برای کاربر خانگی باشد که از این طریق به هر کاربر اجازه دهند تا فرامین خود را در پوشه خانگی اجرا کنند.

[me@linuxbox ~]$ mkdir bin
[me@linuxbox ~]$ mv hello_world bin
[me@linuxbox ~]$ hello_world
Hello World!

اگر اینگونه نیست و چنین مسیری را در تصویر بالا نمی‌بینید! چه کنیم؟ مشکلی نیست می‌توانید به سادگی آن را اضافه کنید. ابتدا فرمان زیر را در خط فرمان اجرا کنید تا فایل .bashrc را ویرایش کنید. به آخر قابل رفته و خط کد زیر را به فایل اضافه کرده و آن را ذخیره کنید:

export PATH=~/bin:"$PATH"

پس از اینکه این تغییر را در فایل ایجاد کردید برای اینکه در ترمینال اعمال شود بایستی کاری کنیم که شل دوباره فایل .bashrc را بخواند. این کار را به صورت زیر انجام می‌دهیم:

[me@linuxbox ~]$ . .bashrc

مکان مناسب برای فایل‌های اسکریپت کجاست؟

دایرکتوری bin در داخل دایرکتوری خانگی مکانی مناسب به منظور استفاده‌های شخصی می‌باشد. اگر که ما اسکریپتی را نوشته‌ایم که می‌خواهیم به همه بر روی سیستم اجازه استفاده از آن را بدهیم بایستی قابل اسکریپت خود را در داخل دایرکتوری اصلی usr/local/bin/ قرار دهیم. اکثرا اسکریپت‌هایی که برای استفاده‌های مدیریتی مورد استفاده قرار می‌گیرند در داخل دایرکتوری usr/local/bin/ قرار می‌گیرند.

ترفندهای دیگر فرمت‌دهی

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

گزینه‌هایی با اسامی بلند

بسیاری از فرمان‌هایی که تا اینجا در خط فرمان یاد گرفتیم دارای گزینه‌های کوتاه و بلند هستند. برای نمونه فرمان ls را در نظر بگیرید. گزینه‌های این فرمان را می‌توان هم به صورت بلند و هم به صورت کوتاه نوشت. برای مثال دو فرمان زیر یکی هستند فقط با این تفاوت که فرمان اولی به فرم کوتاه نوشته شده است و فرمان دومی به فرم طولانی و بلند:

[me@linuxbox ~]$ ls -ad

و

[me@linuxbox ~]$ ls --all --directory

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

تورفتگی و ادامه خط

زمانی که از فرم گزینه‌های بلند استفاده می‌کنیم می‌توانیم با پخش کردن یک فرما بر روی چندین خط خوانایی آن را افزایش دهیم. برای مثال فرمان زیر را در نظر بگیرید:

[me@linuxbox ~]$ find playground \( -type f -not -perm 0600 -exec chmod 0600 '{}' ';' \) -or \( -type d -not -perm 0700 -exec chmod 0700 '{}' ';' \)

یک سوال آیا دستور بالا خواناست؟ جواب آن مشخص است خیر همین دستور را با پخش کردن بین خطوط و سطرهای بیشتر می‌توانید خواناتر کنید به صورت زیر:

find playground \
    \( \
        -type f \
        -not -perm 0600 \
        -exec chmod 0600 '{}' ';' \
    \) \
    -or \
    \( \
        -type d \
        -not -perm 0700 \

        -exec chmod 0700 '{}' ';' \
    \)

با اضافه کردن تورفتگی‌ها به خطوط و قرار دادن فرمان در چندین خط (متدی که همه برنامه‌نویسان برای کدنویسی از آن استفاده می‌کنند) خوانایی متن را افزایش و ویرایش مجدد آن را آسان کنید.

درباره فرشید نوتاش حقیقت

همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرم‌افزارهای آزاد/ متن‌باز و سیستم‌عامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.

نوشته‌های بیشتر از فرشید نوتاش حقیقت
قبلی آموزش نصب داکر در لینوکس
بعدی آغاز یک پروژه در اسکریپت‌نویسی

دیدگاهتان را بنویسید لغو پاسخ

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

جستجو
جستجو برای:
دسته‌بندی موضوعی مقالات
  • برنامه‌نویسی
    • پایتون
  • پایگاه‌داده
    • MariaDB
    • MySQL
  • تجارت الکترونیک
    • بازاریابی اینترنتی
    • دیجیتال مارکتینگ
    • شبکه‌های اجتماعی
  • جامعه کاربری
    • لاگ
  • دسته‌بندی نشده
  • شبکه و امنیت
  • طراحی وب
    • سئو
    • سیستم مدیریت محتوا
      • وردپرس
  • فناوری‌های نوظهور
    • اینترنت اشیاء
    • رایانش ابری
      • OpenStack
    • کلان‌داده‌ها
  • گنو/لینوکس
    • توزیع
      • CentOS
      • اوبونتو
      • دبیان
      • فدورا
    • چیست
    • خط فرمان
  • مهاجرت به آزاد/متن‌باز
  • نرم‌افزار
    • اداری
      • لیبره آفیس
        • ایمپرس
        • بیس
        • دراو
        • رایتر
        • کالک
    • کاربردی
    • گرافیک و انیمیشن
      • بلندر
      • گیمپ
نماد الکترونیکی (اینماد)
پرداخت‌یار

محتوای باز؛ مرجع آموزشی نرم‌افزارهای آزاد/ متن‌باز

از اینکه قصد همکاری با رسانه «محتوای باز» را دارید بسیار خرسندیم و این مایه مباهات ماست.

نحوه همکاری با ما چندان پیچیده نیست و شرایط آن در ادامه، ارائه گردیده است.

دستمزد مدرسین

پیش از بیان شرایط ضبط ویدئو شایان ذکر است اشاره‌ای به دستمزد مدرسین سایت داشته باشیم.

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

صرف نظر از هر حالت ممکنه، می‌بایست شرایطی که در ادامه ذکر شده‌اند را رعایت کرده باشید.

در حالت اول (رایگان) رسانه محتوای باز (Open Content)، نه وجهی از شما برای نشر ویدئو می‌گیرد و نه وجهی به شما پرداخت می‌نماید و دوره آموزشی شما را به رایگان منتشر می‌کند.

اما در حالت بعدی طریقه همکاری به روش درآمد از فروش خواهد بود، به گونه‌ای که 70 درصد از کل مبلغ فروش دوره آموزشی متعلق به مدرس دوره بوده و 30 درصد مابقی به رسانه محتوای باز تعلق می‌گیرد.

شرایط کلی ضبط دوره آموزشی

دوره آموزشی مربوطه، صرف نظر از هر محتوایی که دارد می‌بایست در یکی از توزیعات گنو/لینوکسی ضبط شده باشد. (به‌عنوان مثال دوره دروپال در اوبونتو، دوره آموزشی کار با آردوینو در دبیان و امثالهم). اگر دوره آموزشی شما در محیط ویندوز و یا هر پلتفرم/سیستم‌عامل دیگری ضبط شده باشد از همکاری با شما معذوریم.

پیشنهاد می‌گردد برای ضبط دوره آموزشی در توزیع گنو/لینوکس از ابزار قدرتمند OBS استفاده نمایید. البته این صرفا یک پیشنهاد است و شما می‌توانید از هر ابزار مناسب دیگری برای این کار بهره ببرید.

برای آشنایی یا تسلط بیشتر می‌توانید دوره رایگان آموزش OBS محمد عابدینی را ببینید:

مشاهده دوره آموزش OBS
شرایط کیفی ضبط دوره آموزشی

کیفیت صدا از اهمیت ویژه‌ای برخوردار می‌باشد و می‌بایست فاقد هر گونه نویز یا صدای اضافی دیگری (صدای محیط پیرامون) باشد.

دوره آموزشی تهیه شده صرفا باید برای رسانه محتوای باز تدوین شده باشد و در هیچ سایت مشابه دیگری قرار نگرفته باشد.

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

دوره آموزشی ضبط شده می‌باید فاقد هر گونه لوگو یا آدرس سایت دیگری (در گوشه تصویر یا بک‌گراند صفحه دسکتاپ و هر جای دیگری) باشد.

در حین دوره، مدرس نباید به برند خاصی اشاره کند که جز رقبای ما به‌شمار می‌آیند.

مدرس باید در ابتدا در اواسط و در انتهای دوره به برند ما یعنی رسانه محتوای باز (Open Content) بصورت کلامی اشاره نماید.

مدرس، هنگام تدریس نباید تپق زده، سرفه یا عطسه کند یا صدای قورت دادن بزاقش شنیده شود و بایستی با صدای رسا، دوستانه و پرانرژی به تدریس بپردازد.

قبل از تدوین دوره آموزشی حتما با ما در تماس باشید و یک ویدیوی چنددقیقه‌ای (ترجیحا 5 الی 10 دقیقه)، بصورت نمونه‌کار برای ما بفرستید.

از همکاری با شما سپاسگزاریم.

فراخوان همکاری