معرفی
بش چیست؟
بش (Bash، کوتاهشده Bourne Again Shell) یک پوسته خط فرمان و زبان اسکریپتنویسی است. این ابزار دستورهای واردشده در ترمینال را تفسیر میکند، اجرای برنامهها را کنترل میکند و امکان ذخیرهکردن دستورهای تکراری در فایل اسکریپت را میدهد. راهنمای رسمی GNU Bash ساختار زبان، متغیرها، توابع، شرطها و تغییر مسیر ورودی و خروجی را توضیح میدهد.
بش چه کاربردی دارد؟
در سیستمهای مبتنی بر لینوکس، Bash برای کارهایی مانند جابهجایی فایلها، بررسی لاگ، تعریف متغیر محیطی و اجرای ابزارهای خط فرمان استفاده میشود. قدرت آن در ترکیب برنامههای کوچک با پایپ و تغییر مسیر است. برای مثال، خروجی یک فرمان را به فرمان بعدی میفرستید یا آن را در فایل ذخیره میکنید. بخش پایپها و بخش تغییر مسیر در مستندات Bash رفتار این قابلیتها را مشخص میکنند.
مشاغل نیازمند مهارت در بش
برای متقاضیان بازار کار ایران، Bash را مهارتی مکمل بدانید، نه عنوان شغلی مستقل. در آگهیهای نقشهایی مانند «مهندس دواپس»، «مدیر سیستم لینوکس» و موقعیتهای زیرساختی، معمولاً انتظار میرود بتوانید دستورهای لینوکس را اجرا و عیبیابی کنید و خودکارسازیهای کوتاه بنویسید. میزان نیاز هر موقعیت به Bash به نوع زیرساخت و ابزارهای شرکت بستگی دارد. در کنار آن، مدیریت سیستمهای لینوکس، شبکه، Git، کانتینرها و CI/CD را نیز ارزیابی کنید.
یک تمرین عملی برای شروع
یک فایل لاگ آزمایشی بسازید و اسکریپتی بنویسید که تعداد خطهای دارای ERROR را گزارش کند. این تمرین هم خواندن آرگومان، هم بررسی خطا و هم نقلقولگذاری درست مسیر فایل را درگیر میکند.
فایلی مانند app.log بسازید و چند خط، از جمله دو خط دارای ERROR، در آن قرار دهید.
فایل count-errors.sh را با این منطق بنویسید: ابتدا با set -u استفاده از متغیر تعریفنشده را خطا کنید. سپس مسیر فایل را از آرگومان اول بگیرید. با [ -r "$log_file" ] خواندنیبودن آن را بررسی کنید و با grep -F -c -- "ERROR" "$log_file" تعداد رخدادها را چاپ کنید.
برای اجرای مستقیم فایل، فرمان chmod +x count-errors.sh را اجرا کنید و سپس آن را با ./count-errors.sh app.log اجرا کنید. دستورات شرطی، پارامترهای پوسته و نقلقولگذاری در مستندات رسمی توضیح داده شدهاند.
اگر فایل شما دو خط ERROR دارد، خروجی باید شمارش ۲ را نشان دهد. مسیر فایل را همیشه در نقلقول دوتایی قرار دهید تا فاصله یا نویسههای ویژه باعث شکستن فرمان نشوند. موفقیت تمرین زمانی است که اسکریپت برای فایل معتبر شمارش درست بدهد و برای مسیر نامعتبر، پیام خطا و کد خروج غیرصفر برگرداند.
Bash برای هماهنگکردن فرمانهای سیستم و خودکارسازیهای کوتاه مناسب است. اگر اسکریپت به منطق پیچیده، دادههای ساختیافته فراوان، تست گسترده یا نگهداری بلندمدت نیاز دارد، زبانهایی مانند Python معمولاً خواناتر و قابلنگهداریتر هستند.
ویژگیهای کلیدی
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
اجرای تعاملی دستورها
دستورها را در ترمینال اجرا میکند و تاریخچه، متغیرهای محیطی و سازوکارهای تکمیل فرمان را در اختیار میگذارد. تکمیلهای پیشرفته ممکن است به پیکربندی Bash یا نصب بستههای completion وابسته باشند. مستندات: gnu.org
-
اسکریپتنویسی برای خودکارسازی
میتوانید دستورها، شرطها، حلقهها و توابع را در فایل ذخیره کنید و برای استقرار، پشتیبانگیری یا کارهای نگهداری اجرا کنید. مستندات ساختارهای کنترلی: gnu.org
-
اتصال ابزارهای خط فرمان
با پایپ و تغییر مسیر، خروجی یک ابزار را به ابزار دیگر میدهد یا در فایل ذخیره میکند. مثلاً خروجی لاگ را فیلتر میکند. مستندات: gnu.org
-
مدیریت متغیرهای محیطی
متغیرهای محیطی و تنظیمات اجرای برنامه را تعریف میکند یا به فرایندهای فرزند منتقل میکند. این کار در اسکریپتهای استقرار و اجرای سرویسها کاربرد دارد. مستندات: gnu.org
-
گسترش الگوهای فایل
با الگوهای ASCII مانند * و ? میتواند روی گروهی از فایلها عمل کند و نام مسیرها را پیش از اجرای دستور گسترش دهد. مستندات: gnu.org
-
کنترل وضعیت اجرای فرمان
کد خروج فرمانها و عملگرهای شرطی به اسکریپت کمک میکنند اجرای ناموفق را تشخیص دهد و مسیر خطا را کنترل کند. مستندات: gnu.org
کاربردها
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
اجرای کارهای تکراری روی سرور
برای پاکسازی فایلهای موقت، بررسی فضای دیسک یا اجرای چند فرمان عملیاتی به ترتیب مشخص استفاده میشود. نقلقولگذاری مسیرها و بررسی کد خروج، خطای اجرای ناخواسته را کاهش میدهد. مستندات: gnu.org
-
خودکارسازی فرایند استقرار
میتوان فرمانهای ساخت، دریافت نسخه جدید، اعمال تنظیمات و راهاندازی مجدد سرویس را در اسکریپت قرار داد. اسکریپت باید متغیرهای لازم و رفتار هنگام خطا را شفاف مشخص کند. مستندات: gnu.org
-
بررسی و پردازش لاگها
برای جستوجوی خطا، شمارش رخداد و استخراج بخشهای مشخص از لاگ، Bash میتواند ابزارهایی مانند grep، awk و sed را با پایپ ترکیب کند. مستندات پایپ: gnu.org
-
اسکریپتهای خط لوله CI/CD
در Jenkins میتوان فرمانهای پوسته را در مراحل ساخت، تست یا استقرار اجرا کرد. برای Ansible نیز Bash میتواند playbook را با ansible-playbook اجرا یا آرگومانها و متغیرهای محیطی آن را آماده کند. مستندات: jenkins.io و docs.ansible.com
-
پایش ساده و جمعآوری اطلاعات عملیاتی
اسکریپتهای کوتاه میتوانند وضعیت دیسک، فرایند یا دسترسپذیری یک فرمان را بررسی و خروجی را برای ابزار پایش ثبت کنند. Bash جایگزین سامانه مشاهدهپذیری نیست، اما برای اجرای بررسیهای عملیاتی و جمعآوری داده اولیه مفید است. مستندات: gnu.org
-
تنظیم محیط توسعه محلی
برای تعریف متغیرهای محیطی، راهاندازی وابستگیها، اجرای سرویسهای محلی و ساخت فرمانهای میانبر برای اعضای تیم مناسب است. مستندات: gnu.org
ابزارهای جایگزین
پرسشهای رایج درباره بش
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا بش همان لینوکس است؟
خیر. Linux نام هسته است و توزیعهای لینوکسی سیستمهای کاملی هستند که از این هسته استفاده میکنند. Bash یک پوسته و مفسر دستور است که میتواند روی بسیاری از سیستمهای مبتنی بر لینوکس اجرا شود. یک سیستم ممکن است پوستههای دیگری هم داشته باشد. مستندات Bash: gnu.org
برای شروع یادگیری بش چه پیشنیازی لازم است؟
آشنایی مقدماتی با ترمینال، مسیرها، فایلها و مجوزهای لینوکس کافی است. سپس دستورهای پایه، متغیرها، نقلقولگذاری، تغییر مسیر ورودی و خروجی، شرطها و حلقهها را با تمرینهای واقعی یاد بگیرید. راهنمای رسمی: gnu.org
بش برای مهندس دواپس چقدر مهم است؟
برای اجرای دستورها، عیبیابی سرور، خواندن لاگ و نوشتن خودکارسازیهای سبک بسیار کاربردی است. با این حال، جایگزین دانش لینوکس، شبکه، کانتینرها، زیرساخت بهعنوان کد یا ابزارهای CI/CD نیست و باید در کنار آنها یاد گرفته شود.
چه زمانی بهتر است به جای بش از Python استفاده کنم؟
اگر اسکریپت شما منطق پیچیده، مدیریت خطای گسترده، داده JSON فراوان، اتصال به APIهای متعدد یا نیاز به تست و نگهداری بلندمدت دارد، Python معمولاً انتخاب خواناتری است. Bash برای هماهنگکردن دستورهای سیستم و اتوماسیونهای کوتاه مناسبتر است.
آیا اسکریپت بش روی macOS و لینوکس یکسان اجرا میشود؟
همیشه نه. نسخه Bash و رفتار یا گزینههای ابزارهای همراه سیستم، مانند sed و grep، ممکن است متفاوت باشند. وابستگیها و نسخه ابزارها را مشخص کنید و اسکریپت را در محیط هدف آزمایش کنید. راهنمای Apple برای اسکریپتنویسی پوسته: developer.apple.com
Bash بهتر است یا PowerShell؟
برای محیطهای لینوکسی و ابزارهای یونیکسی، Bash انتخاب رایجی است. PowerShell برای مدیریت ویندوز و سناریوهای چندسکویی گزینه مهمی است، اما نحو، مدل داده و اسکریپتهای آن با Bash سازگار نیستند. انتخاب را بر اساس سیستمهای هدف، ابزارهای تیم و اسکریپتهای موجود انجام دهید. مستندات PowerShell: learn.microsoft.com