برای مهندسان مشتاق DevOps، دانستن shell Scripting یا bash Scripting ضروری است. در این راهنمای shell Scripting برای DevOps، نکات و منابع خود را برای یادگیری صحیح shell Scripting لینوکس به اشتراک خواهم گذاشت.
همچنین در مورد اهمیت shell Scripting در راهنمای تبدیل شدن به یک مهندس DevOps صحبت کردهام. این راهنما برای هر کسی است که میخواهد shell Scripting را به روش صحیح یاد بگیرد و این میتواند به شما در کار روزانه و مصاحبههای DevOps کمک کند. داشتن صبر و انضباط در فرآیند یادگیری بسیار مهم است.
اگر کسی هستید که میخواهد فقط کارها را انجام دهد، گوگل و Stackoverflow بیش از حد کافی هستند 🙂
این چیزی است که ما در این وبلاگ به آن خواهیم پرداخت.
اسکریپتنویسی شل برای DevOps
اولین سوالی که ممکن است داشته باشید این است که اسکریپتنویسی شل برای یک مهندس DevOps چقدر مهم است؟ من این سوال را از تازهکارها و همچنین افراد باتجربه فناوری اطلاعات دریافت کردهام.
پاسخ این است که بسیار مهم است. تصویر زیر نظرسنجی Stackoverflow 2021 را نشان میدهد که در آن 27٪ از پاسخدهندگان گفتهاند که از اسکریپتنویسی شل استفاده میکنند.

اما اغلب اوقات، از من پرسیده میشود که ابزارهای اتوماسیون زیادی وجود دارد و آیا هنوز نیاز به یادگیری و نوشتن اسکریپتهای شل داریم. پاسخ مثبت است. ما دیگر اسکریپتهای شل را برای اتوماسیون کامل نمیسازیم، بلکه از اسکریپتنویسی همراه با ابزارهای اتوماسیون و برای کارهای موقت استفاده میکنیم.
به عنوان مثال، اگر از گزینه دادههای کاربر AWS استفاده کنید، این احتمال وجود دارد که از یک اسکریپت شل در داخل آن استفاده کنید. مثال دیگر این است که هنگام ایجاد تصاویر AMI با استفاده از یک بستهبندیکننده، در نهایت از یک اسکریپت شل برای پیکربندی AMI استفاده خواهید کرد. همچنین، مواردی داشتهام که مجبور شدهام از اسکریپتهای شل با ابزارهای مدیریت پیکربندی، کانتینرها و غیره استفاده کنم. در بخشهای بعدی بیشتر در مورد این موضوع صحبت خواهیم کرد.
همچنین، اسکریپت شل برای کارهای توسعهای تکرارپذیر مفید است. به عنوان مثال، میتواند راهاندازی یک ماشین مجازی Vagrant با نرمافزار ضروری یا راهاندازی خود محیط توسعه باشد.
مهمتر از همه، اسکریپتنویسی و برنامهنویسی عملی در دورهای اولیه مصاحبه در مصاحبههای DevOps اجباری میشود. بنابراین، این یکی دیگر از دلایل مهم است که چرا باید اسکریپتنویسی شل را یاد بگیرید.
چگونه با اسکریپتنویسی شل شروع کنیم؟
پیشنیاز شروع به کار با اسکریپتنویسی شل، تجربه عملی با لینوکس است. بنابراین، قبل از شروع به کار با اسکریپتنویسی شل، باید در کار با دستورات لینوکس راحت باشید.
اگر کاملاً در دنیای لینوکس تازهکار هستید، میتوانید با راهاندازی چند سرور لینوکس به صورت محلی با استفاده از Vagrant یا روی پلتفرمهای ابری مانند AWS، Google Cloud و غیره شروع کنید. هر پلتفرمی اعتبار رایگان برای مبتدیان ارائه میدهد. میتوانید اعتبار ۱۰۰ دلاری رایگان را از Digital Ocean نیز بررسی کنید. شروع کار آسان است.
اگر فکر میکنید با لینوکس راحت هستید، میتوانید با آموزشهای مقدماتی اسکریپتنویسی شل شروع کنید. همچنین، از شما میخواهم موارد زیر را انجام دهید.
یک مخزن گیتهاب ایجاد کنید، برای هر مفهومی که یاد میگیرید پوشه ایجاد کنید و تمام اسکریپتهای کاری خود را ثبت کنید. فرقی نمیکند که اسکریپت به صورت آنلاین در دسترس باشد. مستندات خود را داشته باشید. میتوانید در بخش README، منابع و لینکهای وبسایتها/وبلاگهای اعتباری را اضافه کنید. پس از پایان یادگیری، میتوانید آن را در لینکدین به اشتراک بگذارید. به من اعتماد کنید؛ این به شما کمک میکند تا دانش خود را حفظ کنید و به دیگران نیز کمک خواهد کرد.
بهترین منابع رایگان یادگیری اسکریپتنویسی شل کدامند؟
برای یادگیری اسکریپتنویسی شل لینوکس نیازی به پرداخت هزینه برای هیچ دوره گرانقیمتی ندارید. تبلیغات زیادی در مورد دورههایی وجود دارد که قول میدهند شما را به یک نینجای اسکریپتنویسی شل DevOps تبدیل کنند. با این حال، من هیچ مخالفتی با دورهها ندارم؛ اگر با یادگیری از طریق یک دوره پولی راحت هستید، آن را انتخاب کنید. من آن منابع را نیز اضافه خواهم کرد.
من بهترین منابع رایگان اسکریپتنویسی شل را برای شروع کار شما فهرست کردهام. یک بار تمام منابع را مرور کنید، منبعی را که با آن احساس راحتی میکنید انتخاب کنید و مطمئن شوید که مطالب را از ابتدا تا انتها مرور میکنید. همانطور که قبلاً گفتم، تسلط بر فناوری نیاز به صبر و انضباط دارد.
منابع رایگان را دنبال کنید. این منابع دارای محتوای مبتنی بر وب، آموزشهای تعاملی مبتنی بر وب، دورههای رایگان و مطالب PDF هستند.
- آموزش اسکریپت نویسی شل لینوکس [وب]
- آموزشهای تعاملی رایگان اسکریپت نویسی شل [وب]
- آموزش اسکریپت نویسی شل [وب]
- راهنمای Bash [وب]
- دوره رایگان اسکریپت نویسی شل [Udemy]
- راهنمای اسکریپت نویسی پیشرفته Bash [PDF]
- آکادمی Bash [وب]
- یادداشتهای Bash برای حرفهایها [PDF]
- راهنمای مرجع Bash [PDF]
- خط فرمان لینوکس [PDF]
اما اگر میگویید، من فردی هستم که دورههای آموزشی را دوست دارم، در اینجا برخی از توصیههای من آمده است.
- راهنمای کامل برنامهنویسی Bash - آموزشی
- اسکریپتهای شل برای مبتدیان - KodeKloud
- اسکریپت نویسی شل با Bash - Pluralsight
- عملیاتی کردن اسکریپتهای Bash و Z Shell - Pluralsight
- اسکریپت نویسی شل لینوکس: رویکردی مبتنی بر پروژه برای یادگیری
موارد استفاده از اسکریپتنویسی شل در دنیای واقعی
با فرض اینکه شما تمام مفاهیم اسکریپتنویسی شل را یاد گرفتهاید و احتمالاً اسکریپتهای شل را برای اهداف یادگیری نوشته و اجرا کردهاید. سوال بعدی که هر کسی خواهد داشت این است که چگونه موارد استفاده از اسکریپتنویسی شل در دنیای واقعی را یاد بگیرد؟
اگر در یک شرکت کار میکنید، میتوانید مستندات پروژه و کدهای اتوماسیون زیرساخت را در جایی که پروژههای موجود از اسکریپتهای شل استفاده میکنند، پیدا کنید.
اگر به اسناد و کدهای پروژه دسترسی ندارید، در اینجا کاری که میتوانید انجام دهید آمده است.
مخزن GitHub مربوط به رایجترین تصاویر پایه docker، به عنوان مثال، تصویر پایه Nginx را پیدا کنید.
در آنجا یک پوشه entrypoint با چندین اسکریپت یا یک فایل اسکریپت entrypoint.sh پیدا خواهید کرد. در اینجا یک مثال از nginx آورده شده است.

سعی کنید اسکریپت پوسته و عملکرد آن را درک کنید. در این فرآیند، مفاهیم و منطق زیادی را که میتوان هنگام نوشتن یک اسکریپت پوسته استفاده کرد، خواهید فهمید. (توابع، شرطها، حالتهای سوئیچ و موارد دیگر)
این فقط به مخازن داکر محدود نمیشود، میتوانید اسکریپتها را در بسیاری از مخازن جامعه متنباز پیدا کنید.
سناریوهای واقعی Shell Scripting
همیشه بهتر است که با برخی سناریوهای زمان واقعی از نظر مصاحبههای مهندس DevOps یاد بگیرید. بنابراین من چند سناریوی دنیای واقعی را مطرح کردهام که میتوانید امتحان کنید. من این لیست را به روز خواهم کرد.
- یک تابع اسکریپت شل برای پیدا کردن و از بین بردن تمام فرآیندهای زامبی بنویسید.
- 10 فایل بزرگ اول در سیستم فایل را پیدا کنید و خروجی را در یک فایل بنویسید.
- اسکریپت شل برای جدا کردن دیسک.
- اسکریپت شل برای ارسال ایمیل
- اسکریپت شل برای نظارت بر استفاده از CPU، حافظه و دیسک و ارسال خروجی به یک فایل در قالب جدول و ارسال هشدار در صورت عبور هر یک از آنها از یک آستانه خاص.
- اسکریپت شل برای پیدا کردن فایلهای ایجاد شده و اندازه آنها. باید تعداد روزها را به عنوان ورودی بپذیرد. یا فرمت از و تا تاریخ را به عنوان ورودی بپذیرد.
- یک اسکریپت شل برای خودکارسازی فرآیند ایجاد حسابهای کاربری جدید در یک سرور لینوکس و تنظیم مجوزها و دسترسی SSH آنها بنویسید.
- یک اسکریپت شل برای لیست کاربران وارد شده بر اساس تاریخ بنویسید و آن را در یک فایل خروجی بنویسید.
- اسکریپت شل برای کپی کردن فایلها به صورت بازگشتی به میزبانهای راه دور
- اسکریپت شلی که تعداد تلاشهای ناموفق ورود به سیستم را بر اساس آدرس IP و مکان نمایش میدهد.
- اسکریپت شل، یک فایل لاگ را تجزیه میکند و مقدار مشخصی را با یک مهر زمانی به یک فایل خروجی ارسال میکند.
- یک اسکریپت شل برای خودکارسازی فرآیند چرخش فایلهای لاگ و فشردهسازی فایلهای قدیمی برای صرفهجویی در فضای دیسک بنویسید.
- یک اسکریپت شل برای بررسی وضعیت لیستی از URLها بنویسید و در صورت از کار افتادن هر یک از آنها، یک ایمیل اطلاعرسانی ارسال کنید.
- یک اسکریپت شل برای خودکارسازی فرآیند بهروزرسانی لیستی از سرورها با آخرین وصلههای امنیتی بنویسید.
مطمئن شوید که مفاهیم زیر را در اسکریپتهای شلی که مینویسید، لحاظ میکنید.
- تعاریف متغیر
- استفاده از cut، awk و grep
- مدیریت تغییر مسیرهای ورودی/خروجی/خطا.
- عبارات شرط/اگر در غیر این صورت
- اسکریپتهای عبارت مورد
- حلقهها (برای/در حالی که انجام میشود)
- وضعیت موجود
- آرگومانهای خط فرمان
زبانهای شل اسکریپتنویسی
اول از همه، هیچ زبان اسکریپتنویسی شل خاصی وجود ندارد. وقتی صحبت از اسکریپتنویسی شل میشود، منظور sh، bash، csh، tcsh است. در اینجا ما در درجه اول در مورد اسکریپتنویسی شل bash صحبت میکنیم. Bash یک زبان اسکریپتنویسی تفسیری برای سیستمهای مبتنی بر یونیکس است.
اسکریپت شل یک برنامه کامپیوتری است که برای اجرا توسط پوسته یونیکس، یک مفسر خط فرمان، طراحی شده است.
اما زبانهای اسکریپتنویسی، به طور کلی، به معنای چندین زبان هستند. موارد زیر زبانهای اسکریپتنویسی رایج هستند.
- Powershell
- Python
- Pearl
- Groovy
سوالات مصاحبه شل اسکریپتنویسی در DevOps
سوالات مصاحبه اسکریپتنویسی شل در DevOps از شرکتی به شرکت دیگر متفاوت است.
به عنوان مثال، یک شرکت خدماتی فقط به دانش اولیه شما در مورد لینوکس و اسکریپتنویسی شل علاقهمند است. با این حال، یک شرکت تولیدی ممکن است انتظار سطح خوبی از دانش خط فرمان لینوکس و اسکریپتنویسی شل را داشته باشد.
امروزه، اکثر شرکتها پلتفرمهایی مانند Hackerank را برای سنجش مهارتهای اسکریپتنویسی شما ارائه میدهند. بنابراین تمرین اسکریپتنویسی شل برای حل مشکلات ضروری است.
در ادامه برخی از سوالات اسکریپتنویسی شل در مصاحبه DevOps آمده است.
- آیا میتوانید توضیح دهید که چگونه اسکریپتنویسی شل در یک گردش کار بزرگتر DevOps جای میگیرد؟
- وقتی ابزارهای اتوماسیون برای انجام کار وجود دارد، چه نیازی به اسکریپتهای شل است؟
- در چه سناریوهایی به جای زبانهای برنامهنویسی مانند پایتون یا گولنگ، اسکریپت شل را انتخاب میکنید؟
- چگونه به نوشتن یک اسکریپت شل برای خودکارسازی یک کار خاص نزدیک میشوید؟
- چگونه تجزیه و تحلیل استاتیک برای اسکریپت شل انجام دهیم؟
- چگونه مطمئن میشوید که اسکریپتهای شل در خط لوله CI/CD شما بدون خطا هستند؟
- چگونه میتوانید خطاها و استثنائات را در اسکریپتهای شل مدیریت کنید؟
- اسکریپت شل برای معکوس کردن یک رشته
- تجزیه یک لاگ با فرمت دلخواه و یافتن تمام موارد تکرار یک کلمه
- اسکریپت شل برای ارسال ده خط اول یک فایل به فایل دیگر.
- ادغام (الحاق) دو فایل و نوشتن خروجی در فایل سوم.
- یافتن تمام رشتههای تکراری در یک فایل و جایگزینی آنها با رشته دیگر
- یافتن تمام آدرسهای IP از یک فایل لاگ و نوشتن آن در فایل دیگر.
- چگونه یک اسکریپت شل را که به درستی کار نمیکند، اشکالزدایی میکنید؟
- تفاوت بین حلقه "for" و حلقه "while" در اسکریپتنویسی شل چیست؟
به زودی لیست را با سوالات مصاحبه عمومیتر بهروزرسانی خواهم کرد.
سوالات متداول شل اسکریپتنویسی
در ادامه برخی از سوالات متداول اسکریپتنویسی شل که توسط مهندسان مشتاق DevOps پرسیده میشود، آمده است.
یادگیری اسکریپتنویسی شل لینوکس چقدر سخت است؟
یادگیری اسکریپتنویسی شل مانند یادگیری هر فناوری دیگری است. اگر دانش پایه خوبی از لینوکس دارید، میتوانید اسکریپتنویسی شل را به راحتی یاد بگیرید، مشروط بر اینکه یک مسیر یادگیری منظم را دنبال کنید.
آیا اسکریپتنویسی برای مهندسان DevOps لازم است؟
بله. دانش اسکریپتنویسی برای یک مهندس DevOps بسیار ضروری است. برای محیط توسعه تا تولید، یک مهندس DevOps ممکن است مجبور باشد با استفاده از اسکریپتنویسی، ابزارهای مفیدی ایجاد کند.
کدام زبان اسکریپتنویسی برای DevOps بهترین است؟
بستگی به پروژه دارد. اما Bash، Powershell و Python زبانهای اسکریپتنویسی رایج در پروژههای مبتنی بر DevOps هستند. اگر پروژه از Jenkins استفاده کند، Groovy ضروری است.
آیا Shell Scripting برای اتوماسیون استفاده میشود؟
با ظهور بسیاری از ابزارهای DevOps، نیازی به نوشتن اتوماسیون کامل در اسکریپتهای shell نیست. با این حال، اسکریپتهای shell به عنوان بخشی از آن ابزارهای اتوماسیون برای پشتیبانی از چند قابلیت استفاده میشوند. یک مثال کلاسیک، استفاده از اسکریپتنویسی shell با Hasicorp Packer برای ساخت تصاویر ماشین مجازی است.
نتیجهگیری
امیدوارم از این راهنمای یادگیری اسکریپتنویسی Shell برای مهندسان DevOps لذت برده باشید.
حالا میخواهم از شما بشنوم: کدام روش یا منبع از راهنمای امروز را ابتدا امتحان خواهید کرد؟
آیا قصد دارید با اصول اولیه لینوکس شروع کنید؟ یا روی سوالات مصاحبهای تمرکز خواهید کرد.