آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

پرسش و پاسخ شماره ۲۵

پرسش و پاسخ شماره ۲۵

چطور می‌توانم پارامترهای موضعی(مکانی) بعد از ‎ $9‎ را دستیابی کنم

به جای ‎$10‎ از ‎${10}‎ استفاده کنید. این روش در BASH و KornShell کار می‌کند، اما در پیاده‌سازی‌های قدیمی BourneShell کار نمی‌کند. یک روش دیگر برای دستیابی به پارامترهای مکانی بعد از ‎ $9‎ استفاده از for است، به عنوان مثال, برای به دست آوردن آخرین پارامتر:

    # Bourne
    for last
    do
        : # هیچ
    done

    echo "last argument is: $last"

برای به دست آوردن یک شناسه با عدد، می‌توانیم از شمارشگر استفاده کنیم:

    # Bourne
    n=12        # این شماره شناسه‌ای می‌باشد که مورد نظر است
    i=1
    for arg
    do
        if test $i -eq $n
        then
            argn=$arg
            break
        fi
        i=`expr $i + 1`
    done
    echo "argument number $n is: $argn"

مزیت این روش ازبین نرفتن شناسه‌ها است. اگر مشکلی نیست، فرمان shift پارامترهای مکانی قبلی را دور می‌اندازد:

    shift 11
    echo "the 12th argument is: $1"

به علاوه، bash و ksh93 با مجموعه پارامترهای مکانی به عنوان یک آرایه رفتار می‌کنند،و شما می‌توانید از ترکیب دستوری بسط پارامتر برای آدرس دادن به عناصر آن از راههای مختلف استفاده کنید :

    # Bash, ksh93
    for x in "${@:(-2)}"    # روی دو پارامتر آخر تکرار می‌کند‎
    for y in "${@:2}"       # روی تمام پارامترها تکرار می‌شود  ‎ $2‎ با شروع از ‎
           # استفاده کنیم مفید باشد shift که شاید برای موقعی که نمی‌خواهیم از

اگرچه دستیابی مستقیم به هر پارامتر مکانی به این روش امکان‌پذیر است، به ندرت لازم می‌شود. جایگزین رایج آن استفاده از getopts برای پردازش گزینه‌ها(به عنوان مثال، ‎ "-l"‎ یا ‎"-o filename"‎)، و سپس به کار بردن حلقه for یا while برای پردازش تمام شناسه‌ها یکی پس از دیگری است. یک توضیح از چگونگی پردازش شناسه‌های خط فرمان در پرسش و پاسخ شماره 35 در دسترس می‌باشد، و یک توضیح دیگر در http://www.shelldorado.com/goodcoding/cmdargs.html یافت می‌شود.


CategoryShell

پرسش و پاسخ 25 (آخرین ویرایش ‎ 2009-12-30 18:09:05 ‎ توسط MatthiasPopp)


نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد