نحوه ارسال Arguments به Bash-Script

دستورات، نحو و نمونه ها

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

به عنوان مثال، شما ممکن است یک اسکریپت به نام "stats.sh" داشته باشید که عملیات خاصی در یک فایل انجام می دهد، مانند شمارش کلمات آن. اگر می خواهید قادر به استفاده از این اسکریپت در بسیاری از فایل ها باشید بهتر است نام فایل را به عنوان یک argument وارد کنید تا بتوانید از همان اسکریپت برای تمام فایل هایی که مورد پردازش هستند استفاده کنید. به عنوان مثال، اگر نام فایل مورد پردازش "songlist" باشد، شما می توانید خط فرمان زیر را وارد کنید:

sh stats.sh songlist

Arguments در داخل یک اسکریپت با استفاده از متغیرهای $ 1، $ 2، $ 3 و غیره قابل دسترسی است، جایی که $ 1 به اولین استدلال، $ 2 به آرگومان دوم و غیره اشاره دارد. این در مثال زیر نشان داده شده است:

FILE1 = $ 1 wc $ FILE1

برای خواندن، یک متغیر با نام توصیفی را به مقدار اولین آرگومان ($ 1) اختصاص دهید و سپس از ابزار متغیر کلمه ( wc ) روی این متغیر ($ FILE1) تماس بگیرید.

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

برای FILE1 در "$ @" wc $ FILE1 انجام می شود

در اینجا یک مثال از چگونگی تماس با این اسکریپت با استدلال از خط فرمان است:

sh stats.sh songlist1 songlist2 songlist3

اگر یک استدلال دارای فضاها باشد، شما باید آن را با نقل قول های تک قرار دهید. مثلا:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3

اغلب یک اسکریپت نوشته شده است به طوری که کاربر می تواند در استدلال در هر سفارش با استفاده از پرچم عبور. با استفاده از روش پرچم ها، می توانید برخی از استدلال ها را نیز اختیاری کنید.

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

makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf

Bash این قابلیت را با عملکرد "getopts" فعال می کند. برای مثال فوق، شما می توانید از getopts به صورت زیر استفاده کنید:

این یک حلقه زمانی است که از کارکرد "getopts" و به اصطلاح "optstring" استفاده می کند، در این مورد "u: d: p: f:"، برای تکرار از طریق استدلال. حلقه در حال اجرا از طریق optstring، که حاوی پرچم هایی است که می تواند مورد استفاده برای انتقال استدلال قرار گیرد، و مقدار استدلال ارائه شده برای این پرچم را به متغیر "option" اختصاص می دهد. بیانیه مورد سپس ارزش متغیر "option" را به یک متغیر جهانی اختصاص می دهد که می تواند پس از آنکه همه آرگومان خوانده شد، استفاده شود.

کولون ها در optstring به این معنی است که مقادیر برای پرچم مربوطه مورد نیاز است. در مثال بالا همه پرچم ها با یک کولون دنبال می شوند: "u: d: p: f:". این به این معنی است که همه پرچم ها نیاز به ارزش دارند. اگر، برای مثال، پرچم های "d" و "f" انتظار نداشتند که ارزش داشته باشند، optstring خواهد بود "u: dp: f".

یک کولون در ابتدای optstring، به عنوان مثال ": u: d: p: f:"، به معنای کاملا متفاوت است. این اجازه می دهد تا شما را به مدیریت پرچم که در optstring نشان داده نمی شود. در این مورد، مقدار متغیر "option" به "؟" تنظیم شده است. و ارزش "OPTARG" به پرچم غیر منتظره تنظیم شده است. به شما اجازه می دهد یک پیام خطا مناسب را نشان دهید که به کاربر اشتباه اطلاع داده است.

Arguments که قبل از یک پرچم پیش از آن توسط getopts نادیده گرفته می شوند. اگر پرچم هایی که در optstring مشخص شده اند، زمانی که اسکریپت نامیده می شود، ارائه نمی شود، هیچ اتفاقی رخ نمی دهد، مگر اینکه شما به طور خاص این مورد را در کد خود کنترل کنید. هر استدلالی که توسط getops انجام نمی شود، می تواند با متغیرهای منظم $ 1، $ 2 و غیره دستگیر شود.