خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

خط فرمان لینوکس

ترجمه فارسی LinuxCommand.org

here scriptها

here scriptها

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

نوشتن یک فایل HTML با یک اسکریپت

همچنانکه شاید بدانید، یک فایل HTML خوش ساخت شامل محتویات زیر است:

<html>
<head>
    <title>
    عنوان صفحه شما‎
    </title>
</head>

<body>
    .محتویات صفحه شما در اینجا قرار می‌گیرد‎
</body>
</html>

اکنون، با آنچه از قبل می‌دانیم، می‌توانیم اسکریپتی برای تولید محتوای فوق بنویسیم:

#!/bin/bash

# sysinfo_page - html اسکریپتی برای تولید یک فایل‎ 

echo "<html>"
echo "<head>"
echo "  <title>"
echo "  عنوان صفحه شما"
echo "  </title>"
echo "</head>"
echo ""
echo "<body>"
echo "  .محتویات صفحه شما در اینجا قرار می‌گیرد"
echo "</body>"
echo "</html>" 

این اسکریپت به صورت زیر می‌تواند به کار برود:

[me@linuxbox me]$ sysinfo_page > sysinfo_page.html

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

اولین بهبود برای این اسکریپت، تعویض کاربرد تکراری فرمان echo با یک نمونه منفرد به وسیله استفاده با کفایت‌ترِ نقل‌قول خواهد بود:

#!/bin/bash

# sysinfo_page - html اسکریپتی برای تولید یک فایل‎ 

echo "<html>
 <head>
   <title>
   عنوان صفحه شما
   </title>
 </head>
 
 <body>
   .محتویات صفحه شما در اینجا قرار می‌گیرد
 </body>
 </html>" 

با کاربرد نقل‌قول، تعبیه تعویض سطر در متن ما و داشتن شناسه فرمان echo به صورت گسترده در چند سطر میسر می‌گردد.

در حالیکه این مورد به طور یقین یک بهبود است، دارای یک محدودیت نیز هست. چون بسیاری از انواع نشانه‌گذاری به کار رفته در html خودشان در علامت‌های نقل‌قول به هم پیوسته می‌شوند، کاربرد یک رشته نقل‌قول شده را کمی بد قواره می‌سازد. یک رشته نقل‌قولی می‌تواند به کار برود اما لازم خواهد بود هر علامت نقل‌قول به کار رفته، با کاراکتر \ پوشش داده شود.

به منظور پرهیز از تایپ اضافی، نیازمند جستجوی یک روش مناسب‌تر برای تولید متن خود هستیم. خوشبختانه، پوسته یک مورد را فراهم می‌کند. این مورد here script نامیده می‌شود.

#!/bin/bash

# sysinfo_page - HTML اسکریپتی برای تولید یک فایل‎ 

cat << _EOF_
<html>
<head>
    <title>
   عنوان صفحه شما
    </title>
</head>

<body>
   .محتویات صفحه شما در اینجا قرار می‌گیرد
</body>
</html>
_EOF_ 

یک here script (همچنین گاهی اوقات here document نامیده شده) یک شکل اضافی از تغییر مسیر I/O است. این ویژگی روشی برای پیوست کردن محتویاتی که به ورودی استاندارد فرمان داده خواهد شد، فراهم می‌کند. در مورد اسکریپت فوق، یک جریان متن از اسکریپت ما به ورودی استاندارد فرمان cat داده شد.

یکhere script به این شکل ایجاد می‌گردد:

command << token
محتویاتی که به عنوان ورودی استاندارد فرمان استفاده می‌شود
token 

token هر رشته‌ای از کاراکترها می‌تواند باشد. من از ‎"_EOF_"‎ استفاده می‌کنم (EOF یک مخفف برای‎"End Of File"‎ است) چون عُرف است، اما شما می‌توانید هر رشته‌ای را به کار ببرید، مشروط به اینکه با یک کلمه رزرو شده bash تداخل نکند. آن token که here script را خاتمه می‌دهد، باید به طور دقیق نظیر همان باشد که آنرا شروع کرده است، وگرنه بقیه اسکریپت شما به عنوان ورودی استانداردِ بیشتر برای فرمان تفسیر خواهد شد.

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

#!/bin/bash

# sysinfo_page - HTML اسکریپتی برای تولید یک فایل‎ 

cat <<- _EOF_
    <html>
    <head>
        <title>
   عنوان صفحه شما
        </title>
    </head>

    <body>
   .محتویات صفحه شما در اینجا قرار می‌گیرد
    </body>
    </html>
_EOF_ 

تعویض ‎"<<"‎ به ‎"<<-"‎ باعث می‌شود bash از کاراکترهای tab مقدم (اما فاصله‌ها خیر) در here script چشم پوشی کند. خروجی فرمان cat شامل هیچ یک از کاراکترهای tab مقدم نخواهد بود.

بسیار خوب، بیایید صفحه خود را بسازیم. ما صفحه‌مان را برای اینکه مطلبی را بیان کند ویرایش می‌کنیم:

#!/bin/bash

# sysinfo_page - HTML اسکریپتی برای تولید یک فایل‎ 

cat <<- _EOF_
    <html>
    <head>
        <title>
        My System Information
        </title>
    </head>

    <body>
    <h1>My System Information</h1>
    </body>
    </html>
_EOF_ 

در درس بعدی، اسکریپت خود را برای تولید اطلاعات واقعی در باره سیستم آماده خواهیم نمود.