بررسی روشهای دریافت داده به اسکریپت ها و کنترل مسیر اجرای اسکریپت برای اتوماسیون بهتر و مدیریت اسکریپت.
ارسال شده: 19 مه 2021 |
یکی از مهمترین ابزارها برای اکثر sysadmins اتوماسیون است. ما اسکریپت ها را می نویسیم و برای خودکار سازی کارهای مشترک و مکرر که باید انجام دهیم ، می نویسیم.
بیشتر منابع لینوکس
من ده ها اسکریپت دارم - short و طولانی - که من در طول سالها نوشتم و اصلاح کرده ام. برخی از اسکریپت های مفید من این بوده است که هر روز صبح از تهیه نسخه پشتیبان منظم استفاده کنید ، بسته های نرم افزاری به روز شده را با رفع و پیشرفت نصب کنید و از یک نسخه از Fedora به نسخه بعدی ارتقا دهید. من چند روز پیش با استفاده از یک اسکریپت نسبتاً ساده ، همه میزبان ها و سرورهای شخصی خود را به Fedora 34 ارتقا دادم.
دو مورد از رایج ترین کارهایی که برای همه اسکریپت های من انجام می دهم ، ایجاد یک عملکرد کمک و تابعی است که بیانیه مجوز GPL3 را نشان می دهد. من دوست دارم حالت های Verbose یا Test را برای کمک به تعیین مشکل در اسکریپت های خود درج کنم. در برخی از اسکریپت ها ، مقادیری مانند نام کاربری ، نسخه Fedora را برای به روزرسانی به نام پرونده ها و موارد دیگر نیز منتقل می کنم.
امکان استفاده از پارامترهای موقعیتی - به همین ترتیب که به عنوان آرگومان شناخته می شود - برای مشخص کردن داده هایی که به عنوان مقادیر متغیرهای موجود در اسکریپت ها مورد استفاده قرار می گیرند ، یکی از روش های انجام این کار است. مورد دیگر استفاده از گزینه ها و آرگومان های گزینه است. در این مقاله به بررسی این دو روش برای دریافت داده ها به اسکریپت و کنترل مسیر اجرای اسکریپت می پردازیم.
پارامترهای مثبت
Bash از ابزاری به نام پارامترهای موقعیتی برای ارائه وسیله ای برای وارد کردن داده ها به یک برنامه BASH هنگام فراخوانی از خط فرمان استفاده می کند. ده پارامتر موقعیتی وجود دارد که از 0 دلار تا 9 دلار اجرا می شود ، اگرچه روش هایی برای هک کردن در این حد وجود دارد.
با یک اسکریپت ساده شروع می شود که یک نام وارد شده را روی صفحه نمایش می دهد. با محتوای زیر پرونده ای به نام script1. sh ایجاد کنید و آن را اجرا کنید.
من این فیلمنامه را در خودم قرار دادم~/دایرکتوری سطل ، که در آن پرونده های اجرایی شخصی مانند اسکریپت ها در نظر گرفته شده اند. به متغیر مسیر $ خود ، که شامل/خانه/نام کاربری/سطل به عنوان یک مؤلفه است ، نگاه کنید. اگر~/دایرکتوری سطل وجود ندارد ، می توانید آن را ایجاد کنید. یا فقط می توانید این پرونده را در هر کجا که می خواهید قرار دهید و از آنجا استفاده کنید.
سپس اسکریپت را بدون پارامتر اجرا کنید.
خروجی این اسکریپت نام فیلمنامه است. پارامتر 0 دلار به عنوان نام اسکریپت در حال اجرا محفوظ و از پیش تعریف شده است و برای هر منظور دیگری قابل استفاده نیست. این می تواند در داخل یک اسکریپت مفید باشد زیرا در صورت نیاز به اسکریپت نام خود را ندارید.
بنابراین اسکریپت را تغییر دهید تا از 1 دلار برای متغیر موقعیت استفاده کنید و دوباره آن را اجرا کنید:
دوباره آن را اجرا کنید ، این بار با استفاده از یک پارامتر واحد:
چه اتفاقی می افتد اگر پارامتر دو کلمه باشد؟
این در واقع دو پارامتر است ، اما شما می توانید آن را با نقل قول ها ، همانطور که در اینجا مشاهده می کنید ، اصلاح کنید:
این می تواند در جایی که ورودی قرار است یک آدرس خیابانی یا چیزی با چندین کلمه باشد ، مفید باشد ، مانند این:
اما مواقعی وجود دارد که شما به پارامترهای مختلفی مانند نام یا آدرس کامل نیاز دارید.
برنامه را تغییر دهید تا به این شکل به نظر برسد:
و آن را با استفاده از پارامترها همانطور که نشان داده شده است اجرا کنید:
البته پس از اختصاص مقادیر ، روشهای زیادی برای استفاده از پارامترهای موقعیتی وجود دارد ، اما این برنامه کوچک باعث می شود که آنچه اتفاق می افتد را آسان کنید. همچنین آزمایش را به روشی ایمن آسان می کند.
سعی کنید پارامترها را به ترتیب دیگری قرار دهید تا ببینید که چگونه این کار می کند. این پارامترها موقعیتی هستند و این یک نکته اساسی است. شما باید در نظر بگیرید که چند پارامتر مورد نیاز است ، چگونه کاربر آنها را به خاطر می آورد و چه نظمی را برای قرار دادن آنها در نظر می گیرد.
شما به روشی نیاز دارید تا ترتیب پارامترها بی ربط باشد و هنوز هم به راهی برای اصلاح مسیر اجرای نیاز دارید.
امنیت لینوکس
گزینه ها
شما می توانید با استفاده از گزینه های خط فرمان ، این دو کار را انجام دهید.
من می دانم که حتی برنامه های ساده Bash باید به نوعی از امکانات کمک داشته باشند ، حتی اگر نسبتاً احتیاطی باشد. بسیاری از برنامه های Bash Shell که می نویسم به اندازه کافی استفاده می شود که ممکن است نحو دقیق فرمان مورد نیاز خود را فراموش کنم. برخی از آنها کاملاً پیچیده هستند که باید گزینه ها و استدلال های مورد نیاز را بررسی کنم حتی اگر من به طور مکرر از آنها استفاده کنم.
داشتن یک تابع کمک داخلی به شما امکان می دهد بدون اینکه به بازرسی از کد خود متوسل شوید ، آن چیزها را مشاهده کنید. تسهیلات کمک خوب و کامل نیز بخشی از مستندات برنامه است.
درباره توابع
توابع پوسته لیستی از بیانیه های برنامه Bash است که در محیط پوسته ذخیره شده است و با تایپ نام آن در خط فرمان می تواند مانند هر دستور دیگری اجرا شود. توابع پوسته همچنین بسته به اینکه زبان برنامه نویسی دیگری که ممکن است از آن استفاده کنید ، ممکن است به عنوان روش یا زیر مجموعه شناخته شود.
توابع در اسکریپت های شما یا از CLI با استفاده از نام آنها خوانده می شوند ، دقیقاً مانند هر دستور دیگری. در یک برنامه CLI یا یک اسکریپت ، دستورات این عملکرد هنگام فراخوانی اجرا می شوند. سپس دنباله جریان برنامه به نهاد فراخوانی باز می گردد و سری بعدی بیانیه های برنامه در آن نهاد اجرا می شود.
نحو یک تابع:
یک عملکرد ساده در CLI ایجاد کنید. این عملکرد در محیط پوسته برای نمونه پوسته ای که در آن ایجاد شده است ذخیره می شود. شما می خواهید تابعی به نام HW ایجاد کنید که مخفف Hello World است. کد زیر را در CLI وارد کرده و Enter را فشار دهید. سپس HW را همانطور که می خواهید دستور پوسته دیگری وارد کنید.
خوب ، بنابراین من از استاندارد "سلام جهان!" کمی خسته شده ام. من معمولاً بااکنون تمام عملکردهای تعریف شده در حال حاضر را لیست کنید. تعداد زیادی از آنها وجود دارد ، بنابراین من فقط عملکرد جدید HW را نشان داده ام. هنگامی که از خط فرمان یا در یک برنامه فراخوانی می شود ، یک تابع وظیفه برنامه ریزی شده خود را انجام می دهد. سپس خارج می شود و کنترل را به نهاد فراخوانی ، خط فرمان یا بیانیه برنامه بعدی BASH در یک اسکریپت پس از بیانیه فراخوانی بازگرداند.
اکنون آن عملکرد را حذف کنید زیرا دیگر به آن احتیاج ندارید. شما می توانید این کار را با دستور UNET انجام دهید ، مانند این:
اسکریپت Hello. sh
یک اسکریپت جدید Bash Shell ایجاد کنید ،~/bin/hello. sh ، و آن را اجرا کنید. محتوای زیر را اضافه کنید ، و آن را اساسی نگه دارید:
آن را اجرا کنید تا تأیید کنید که چاپ "سلام جهان!"
من می دانم - من نمی توانم به خودم کمک کنم ، بنابراین به "سلام جهان!" بازگشتم.
ایجاد عملکرد راهنما
عملکرد راهنما نشان داده شده در زیر را به برنامه Hello Program اضافه کنید. عملکرد راهنما را بین دو جمله ای که قبلاً دارید قرار دهید. این عملکرد راهنما توضیحات کوتاهی از برنامه ، نمودار نحوی و توضیحات کوتاه از هر گزینه موجود را نشان می دهد. شما همچنین می توانید برای آزمایش آن و برخی از خطوط اظهار نظر که مشخصات بصری بین توابع و بخش اصلی برنامه را ارائه می دهد ، به عملکرد راهنما اضافه کنید.
این برنامه اکنون به این شکل است.
گزینه های شرح داده شده در این عملکرد راهنما ممکن است در برنامه هایی که می نویسم معمولی باشد ، اگرچه هنوز هیچکدام در کد وجود ندارند. برنامه را برای آزمایش آن اجرا کنید.
از آنجا که شما هیچ منطقی برای نمایش راهنما در صورت تمایل اضافه نکرده اید ، برنامه همیشه کمک را نشان می دهد. با این حال ، شما می دانید که این عملکرد به درستی کار می کند ، بنابراین می توانید هنگام استفاده از گزین ه-h در دعوت خط فرمان برنامه ، فقط منطقی اضافه کنید تا راهنما را نشان دهید.
[آیا می خواهید مهارت های sysadmin خود را آزمایش کنید؟امروز یک ارزیابی مهارت انجام دهید.]
گزینه های حمل و نقل
توانایی اسکریپت Bash برای رسیدگی به گزینه های خط فرمان مانن د-H برای نمایش کمک ، برخی از قابلیت های قدرتمند را برای هدایت برنامه و اصلاح آنچه انجام می دهد به شما می دهد. در مورد گزین ه-h شما ، می خواهید برنامه متن راهنما را در جلسه ترمینال چاپ کند و سپس بدون اجرای بقیه برنامه ترک شود. امکان پردازش گزینه های وارد شده در خط فرمان را می توان با استفاده از دستور در حالی که در رابطه با GetOps و دستورات موردی قرار دارد ، به اسکریپت Bash اضافه کنید.
دستور GetOps هر گزینه و همه گزینه های مشخص شده در خط فرمان را می خواند و لیستی از این گزینه ها را ایجاد می کند. فرمان در حالی که با تنظیم گزینه های متغیر $ برای هر یک در کد زیر ، لیست گزینه ها را حلقه می کند. عبارت موردی برای ارزیابی هر گزینه به نوبه خود و اجرای اظهارات موجود در تنگی مربوطه استفاده می شود. در حالی که بیانیه تا زمانی که همه آنها پردازش نشده باشند یا بیانیه خروجی با آن روبرو شوند ، به ارزیابی لیست گزینه ها ادامه خواهد داد ، که این برنامه را خاتمه می دهد.
حتماً قبل از اکو "سلام جهان!" تماس عملکرد راهنما را حذف کنید. بیانیه ای که اکنون بدنه اصلی برنامه به این شکل باشد.
در انتهای بیانیه خروجی در گزینه موردی برا ی-h ، به قسمت اصلی دو برابر توجه کنید. این برای هر گزینه مورد نیاز است. برای ترسیم انتهای هر گزینه ، به این بیانیه اضافه کنید.
آزمایش اکنون کمی پیچیده تر است. شما باید برنامه خود را با چندین گزینه مختلف - و بدون گزینه - آزمایش کنید تا ببینید که چگونه پاسخ می دهد. ابتدا ، اطمینان حاصل کنید که بدون هیچ گزینه ای که چاپ "سلام جهان!"همانطور که باید
این کار می کند ، بنابراین اکنون منطقی را که متن راهنما را نشان می دهد ، آزمایش کنید.
این همانطور که انتظار می رفت کار می کند ، بنابراین اکنون برخی از آزمایشات را امتحان کنید تا ببینید وقتی گزینه های غیر منتظره ای را وارد می کنید چه اتفاقی می افتد.
رسیدگی به گزینه های نامعتبر
این برنامه فقط گزینه هایی را که شما برای ایجاد پاسخ های خاص ایجاد نکرده اید ، بدون ایجاد خطا ، نادیده می گیرد. اگرچه در آخرین ورودی با گزینه ها ی-lkjsahdf ، زیرا "H" در لیست وجود دارد ، این برنامه آن را تشخیص داده و متن راهنما را چاپ می کند. آزمایش نشان داده است که یک مورد که از دست رفته است ، امکان رسیدگی به ورودی نادرست و خاتمه برنامه در صورت شناسایی است.
می توانید یک مورد دیگر را به بیانیه موردی اضافه کنید که با هر گزینه ای که برای آن مطابقت صریح وجود ندارد ، مطابقت دارد. این مورد کلی با هر چیزی که شما برای آن مسابقه خاصی ارائه نداده اید مطابقت دارد. بیانیه پرونده اکنون به این شکل است.
Kubernetes و OpenShift
این بخش کد مستحق توضیح در مورد نحوه عملکرد آن است. به نظر می رسد پیچیده است اما درک آن بسیار آسان است. در حالی که ساختار انجام شده حلقه ای را تعریف می کند که یک بار برای هر گزینه در ساختار GetOpts - ساختار گزینه اجرا می شود. رشته ": H" - که به نقل قول ها نیاز دارد - گزینه های ورودی احتمالی را که توسط پرونده - ساختار ESAC ارزیابی می شود ، لیست می کند. هر گزینه ذکر شده باید در بیانیه پرونده دارای یک تنگی مربوط باشد. در این حالت ، دو مورد وجود دارد. یکی H) Stanza است که روش کمک را می نامد. پس از اتمام مراحل کمک ، اجرای به بیانیه برنامه بعدی ، خروج ؛که حتی اگر برخی از آنها وجود داشته باشد ، از برنامه خارج می شود. حلقه پردازش گزینه نیز خاتمه یافته است ، بنابراین هیچ گزینه اضافی بررسی نمی شود.
به مسابقه همه چیز توجه می کنید؟به عنوان آخرین تنگی در بیانیه پرونده. اگر گزینه هایی وارد شود که به رسمیت شناخته نشود ، این تنگی یک پیام با خطای کوتاه را چاپ می کند و از برنامه خارج می شود.
هر مورد خاص اضافی باید قبل از همه چیز نهایی باشد. من دوست دارم استنزا ها را به ترتیب حروف الفبا قرار دهم ، اما شرایطی وجود خواهد داشت که می خواهید اطمینان حاصل کنید که یک مورد خاص قبل از موارد دیگر پردازش می شود. عبارت موردی حساس به توالی است ، بنابراین هنگام ساخت خود از آن آگاه باشید.
آخرین بیانیه هر تنگی در ساختار پرونده باید با نیمه دوتایی (؛؛) پایان یابد ، که برای نشان دادن پایان هر تنگی به صراحت استفاده می شود. این اجازه می دهد تا برنامه نویسان که دوست دارند به جای برنامه های ضمنی ، برای پایان هر بیانیه از نقاط صریح استفاده کنند ، برای ادامه این کار برای هر بیانیه در هر مورد ، این کار را ادامه می دهند.
برنامه را دوباره با استفاده از گزینه های مشابه قبل آزمایش کنید و ببینید که اکنون این کار چگونه است.
فیلمنامه Bash اکنون به این شکل است.
حتماً این نسخه از برنامه خود را کاملاً آزمایش کنید. از ورودی تصادفی استفاده کنید و ببینید چه اتفاقی می افتد. همچنین باید بدون استفاده از خط ( -) در جلو ، گزینه های معتبر و نامعتبر را آزمایش کنید.
با استفاده از گزینه ها برای وارد کردن داده ها
ابتدا یک متغیر اضافه کرده و آن را اولیه کنید. دو خط نشان داده شده را به صورت پررنگ در بخش برنامه نشان داده شده در زیر اضافه کنید. این متغیر نام $ را به عنوان پیش فرض به "جهان" آغاز می کند.
خط آخر برنامه ، دستور ECHO را به این تغییر دهید.
منطق را برای وارد کردن یک نام در یک لحظه اضافه کنید اما ابتدا برنامه را دوباره آزمایش کنید. نتیجه باید دقیقاً مانند گذشته باشد.
$ Optarg همیشه نام متغیر است که برای هر آرگومان گزینه جدید استفاده می شود ، مهم نیست که چه تعداد وجود دارد. شما باید مقدار را در $ Optarg به یک نام متغیر اختصاص دهید که در بقیه برنامه استفاده خواهد شد. این تنگی جدید بیانیه خروجی ندارد. این جریان برنامه را تغییر می دهد به طوری که پس از پردازش کلیه گزینه های معتبر در بیانیه مورد ، اجرای پس از ساخت پرونده به بیانیه بعدی منتقل می شود.
برنامه اصلاح شده را آزمایش کنید.
برنامه تکمیل شده به این شکل است.
حتماً تسهیلات راهنما و نحوه واکنش این برنامه به ورودی را برای ورود به سیستم تست کنید تا تأیید کند که توانایی آن در پردازش این موارد به خطر نیامده است. اگر همه اینها همانطور که باید انجام شود ، پس شما با موفقیت آموخته اید که چگونه از گزینه ها و آرگومان های گزینه استفاده کنید.
بسته شدن
نصیحت شغلی
در این مقاله ، شما از پارامترهای موقعیتی برای وارد کردن داده ها در برنامه BASH در هنگام دعوت از خط فرمان استفاده کرده اید و از گزینه هایی برای هدایت جریان برنامه و همچنین وارد کردن داده ها به برنامه استفاده کرده اید. شما یک عملکرد راهنما و امکان پردازش گزینه های خط فرمان را برای نمایش کمک انتخابی اضافه کردید. و شما یک آرگومان اختیاری اضافه کرده اید که اجازه می دهد تا یک نام را در خط فرمان وارد کنید.
این برنامه آزمایشی کوچک به گونه ای طراحی شده است که ساده است ، بنابراین می توانید خودتان به راحتی با آن آزمایش کنید تا این روش ورودی را به تنهایی آزمایش کنید. به عنوان یک تمرین ، برنامه را تجدید نظر کنید تا نام و نام خانوادگی را بگیرید. سعی کنید گزینه های اول و نام خانوادگی را به ترتیب معکوس وارد کنید تا ببینید چه اتفاقی می افتد.