here document – here script
توسط royaflash دذ ۶ آذر, ۱۳۹۵ دذ ۰۹:۴۰ قبل از ظهر | دسته‌بندی شده در shell, خط فرمان, گنو/لینوکس | با ۰ دیدگاه |231 views

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>" 

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

[[email protected] 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_ 



متغیرها

#!/bin/bash

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

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

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

حال که اسکریپت قابل کارکرد خود را داریم، بیایید آن را بهبود بدهیم. اول از همه، برخی تغییرات ایجاد خواهیم نمود زیرا می‌خواهیم تنبل باشیم. در اسکریپت فوق، می‌بینیم که عبارت ‎”My System Information”‎ تکرار می‌شود. این تایپ کردن بیهوده است (و کار اضافی!) بنابراین آن را به این صورت بهبود می‌دهیم:

#!/bin/bash

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

title="My System Information"

cat <<- _EOF_
    <html>
    <head>
        <title>
        $title
        </title>
    </head>

    <body>
    <h1>$title</h1>
    </body>
    </html>
_EOF_ 

به طوری که می‌توانید مشاهده کنید، یک سطر به ابتدای اسکریپت اضافه کردیم و دو موردِ وجود عبارت ‎”My System Information”‎ را با ‎$title‎ تعویض نمودیم.

متغیرها

آنچه ما انجام داده‌ایم معرفی ایده بسیار اساسی متغیرها است که تقریباً در هر زبان برنامه‌نویسی ظاهر می‌شود. متغیرها محدوده‌هایی از حافظه هستند که می‌توانند برای ذخیره اطلاعات و مراجعه به آنها بواسطه یک نام، به کار بروند. در مورد اسکریپت خودمان، ما متغیری به نام ‎”title”‎ ایجاد کردیم و عبارت ‎”My System Information”‎ را در حافظه قرار دادیم. داخل here script که شامل HTML ما است، از ‎”$title”‎ استفاده می‌کنیم که به پوسته بگوییم بسط پارامتررا انجام بدهد و نام متغیر را با محتوای متغیر تعویض نماید.

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

چگونگی ایجاد یک متغیر

برای ایجاد یک متغیر، یک سطر در اسکریپت خود قرار بدهید که شامل نام متغیر و به دنبال آن بلافاصله علامت تساوی‎ (“=”)‎ باشد. هیچ فاصله‌ای مجاز نیست. بعد از علامت تساوی، اطلاعاتی را که مایل به ذخیره هستید تخصیص بدهید.

نام متغیرها از کجا ناشی می‌شوند؟

شما آنها را می‌سازید. درست است، شما نامها را برای متغیرهایتان انتخاب می‌کنید. چند قاعده وجود دارد.

  1. نامها باید با یک حرف شروع بشوند.
  2. یک نام نباید محتوی فاصله‌ها باشد. به جای آن از underscoreها(خط زیر) استفاده کنید.
  3. نمی‌توانید علامت‌های نشانه‌گذاری را به کار ببرید.

این مطلب چگونه تنبلی ما را توسعه می‌دهد؟

افزودن متغیر title به دو طریق کار ما را آسانتر می‌کند. نخست، مقدار تایپی که باید انجام بدهیم را کاهش می‌دهد. دوم و به طور مهم‌تر، پشتیبانی اسکریپت ما را آسانتر می‌سازد.

همچنانکه شما اسکریپت‌های بیشتر و بیشتری می‌نویسید (یا هر نوع برنامه‌نویسی دیگری انجام می‌دهید)، خواهید آموخت که برنامه‌ها اصلاً به ندرت تکمیل می‌شوند. آنها به وسیله تولید کنندگان‌شان و سایرین ویرایش می‌شوند و بهبود می‌یابند. به هر حال، این همان موردی است که توسعه منبع باز متوجه آن است. بیایید فرض کنیم شما می‌خواستید در نگارش قبلی اسکریپت، عبارت ‎”My System Information”‎ را به ‎”Linuxbox System Information.”‎ تغییر بدهید، شما می‌بایست در دو محل این را تعویض می‌کردید. در نگارش جدید با متغیر title فقط در یک محل باید آن را تعویض کنید. چون اسکریپت ما اینقدر کوچک است، شاید این موضوع کم اهمیتی به نظر آید، اما چنانچه اسکریپت بزرگتر و پیچیده‌تر بشود، بسیار با اهمیت می‌گردد.

متغیرهای محیط

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

#!/bin/bash

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

title="System Information for"

cat <<- _EOF_
    <html>
    <head>
        <title>
        $title $HOSTNAME
        </title>
    </head>

    <body>
    <h1>$title $HOSTNAME</h1>
    </body>
    </html>
_EOF_
       

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

درباره - یاشار اسمعیل دخت هستم ۲۷ سالمه (به دنیال یافتم آنم که کیستم)به صورت ۱۰۰٪ به گنو/لینوکس مهاجرت کردم . من رو با نام royaflash میشناسید . در زمینه شبکه و امنیت شبکه فعالیت میکنم . لینوکس همیشه چیزی برای یادگیری داره و لینوکس یه فرهنگه . در صورت نیاز میتونین با آدرس ایمیل : [email protected] یا شماره تلفن : 09141100257 در ارتباط باشید . وبلاگ شخصی من (-:) درباره من

فرستادن یک دیدگاه

XHTML: شما می‌توانید از این برچسب‌ها استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>