اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

نحوه فعال کردن مد دیباگ به منظور بررسی syntax در شل اسکریپت ها

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    نحوه فعال کردن مد دیباگ به منظور بررسی syntax در شل اسکریپت ها

    ما قبلا در مورد debug کردن shell script به واسطه گزینه های متفاوت دیباگ بحث کردیم، توصیه میشود لینک آموزش نحوه فعال سازی مد debug در shell script را مطالعه فرمایید. بعد از اینکه شل اسکریپت خودتان رو نوشتید اکیدا توصیه شده که syntax را در اسکریپت و قبل از اجرای آنها بررسی کنید تا خروجی آنها را مشاهده و صحت کارکرد اسکریپت را تایید کنید.

    در این پست ما به استفاده از mode دیباگ به منظور بررسی ساختار (syntax) خواهیم پرداخت. ما از گزینه های متفاوت دیباگ که در پست قبلی مطرح کردیم برای اجرا کردن دیباگ اسکریپت استفاده خواهیم کرد.


    همچنین توصیه میشود مطالعه کنید :

    استفاده از شل اسکریپت برای اتوماتیک کردن Task ها در لینوکس

    نحوه فعال کردن مد Debug شل اسکریپت در لینوکس

    آموزش نحوه اجرای Trace دستورات در شل اسکریپت با استفاده از Shell Tracing




    فعال کردن مد دیباگ Verbose

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

    برای نمایش نحوه کارکرد آن به نمونه زیر توجه کنید که یک نمونه shell script برای convert دسته جمعی تصاویر با پسوند png به فرمت jpg میباشد.

    نمونه زیر را درون یک فایل تایپ و یا کپی، پیست کنید.
    کد PHP:
    #!/bin/bash
    #convert
    for image in *.png; do
            
    convert  "$image"  "${image%.png}.jpg"
            
    echo "image $image converted to ${image%.png}.jpg"
    done
    exit 
    سپس فایل را ذخیره کنید و با استفاده از دستور زیر به اسکریپت قابلیت اجرایی بدهید.
    کد PHP:
    chmod +x script.sh 
    ما میتوانیم از اسکریپت استفاده کنیم و تمامی خطوط موجود در آن را در حالیکه توسط shell در حال خوانده شدند هستند نمایش دهیم.
    کد PHP:
    bash -v script.sh 
    نحوه فعال کردن مد دیباگ در شل اسکریپت






    فعال کردن Debugging Mode به منظور بررسی Syntax در Shell Script

    به اصل مطلب برمیگردیم، با استفاده از آپشن -n میتوانیم مد بررسی syntax را enable کنیم. این آپشن شل را مجبور میکند که تمام دستورات را بخواند اما آنها را اجرا نکند و در حقیقت شل تنها ساختار مورد استفاده را امتحان و مورد تست قرار میدهد.

    اگر هر گونه error ی در شل اسکریپت شما موجود باشد shell خطاها را روی ترمینال نمایش میدهد، در غیر اینصورت هیچ چیزی نمایش داده نمیشود.

    ساختار فعال کردن بررسی syntax به شکل زیر انجام میشود :
    کد PHP:
    bash -n script.sh 
    به دلیل اینکه syntax در اسکریپت درست است دستور بالا هیچ خروجی ندارد. اما برای اینکه error را نیز به شما نمایش دهیم اجازه دهید کلمه "done" (که هر گونه loop ی را میبندد) حذف کنیم و ببینیم آیا خطایی دریافت میکنیم یا خیر.

    نمونه زیر همان شل اسکریپت تبدیل دسته جمعی فایل های png به فرمت jpg میباشد که آنرا تغییر دادیم و در حقیقت یک bug در آن ایجاد کردیم.
    کد PHP:
    #!/bin/bash
    #script with a bug
    #convert
    for image in *.png; do
            
    convert  "$image"  "${image%.png}.jpg"
            
    echo "image $image converted to ${image%.png}.jpg"

    exit 
    فایل را ذخیره کنید و سپس آنرا در حالیکه دیباگ syntax را فعال کرده اید اجرا کنید :
    کد PHP:
    bash -n script.sh 
    نحوه بررسی syntax در شل اسکریپت




    از خروجی بالا میتوانیم مشاهده کنید که یک مشکل syntax ی در اسکریپت مان وجود دارد، در حقیقت کمبود یک کلمه کلیدی "done" که برای بستن لوپ (loop) استفاده میشود در فایل مشهود است و شل به دنبال آن میگردد تا فایل را خاتمه دهد و به محض اینکه آنرا (done) پیدا نکند syntax error را نمایش میدهد.
    کد PHP:
    script.shline 11syntax errorunexpected end of file 
    ما همچنین میتوانیم verbose mode و syntax mode را با هم ترکیب کنیم :
    کد PHP:
    bash -vn script.sh 
    نحوه فعال کردن مد debuge در shell script




    هم چنین ما میتوانیم بررسی syntax را تغییر اولین خط اسکریپت همانطور که در مثال بعدی میبینید فعال کنید.
    کد PHP:
    #!/bin/bash -n
    #altering the first line of a script to enable syntax checking

    #convert
    for image in *.png; do
        
    convert  "$image"  "${image%.png}.jpg"
        
    echo "image $image converted to ${image%.png}.jpg"

    exit 
    مانند قبل فایل را ذخیره کنید و آنرا در حالیکه ساختار را بررسی میکند اجرا کنید :
    کد PHP:
    $ ./script.sh

    script
    .shline 12syntax errorunexpected end of file 
    علاوه بر این ما میتوانیم از دستور درونی شل به نام set استفاده کنیم تا مد دیباگ را در شل فعال سازیم.

    در مثال زیر ما تنها به بررسی ساختار اسکریپت مان به منظور هر گونه loop میپردازیم.
    کد PHP:
    #!/bin/bash
    #using set shell built-in command to enable debugging
    #convert

    #enable debugging
    set -n
    for image in *.png; do
        
    convert  "$image"  "${image%.png}.jpg"
        
    echo "image $image converted to ${image%.png}.jpg"

    #disable debugging
    set +n
    exit 
    یک بار دیگر فایل را ذخیره و آنرا اجرا کنید.
    کد PHP:
    $ ./script.sh 
    در نهایت باز هم عنوان میکنیم که همیشه باید از نظر ساختاری (syntactically) شل اسکریپت هایمان را بررسی کنیم تا هر گونه خطایی را قبل از اجرا کردن آن پیدا کنیم.

    در آینده ای نچندان دور ما به توضیح و استفاده از مد دیباگ "Tracing" شل خواهیم پرداخت. اگر هر گونه نظر یا پیشنهادی درباره این پست دارید میتوانید با ما درمیان بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-26-2021, 01:15 AM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X