بش، که مخفف "Bourne Again SHell" است، یک شل یونیکس و زبان دستوری است که به عنوان یک مفسر دستوری برای سیستمعامل و یک زبان برنامهنویسی برای نوشتن اسکریپتهای شل عمل میکند. بش به عنوان جایگزینی برای شل بورن (sh) ایجاد شده است و ویژگیهایی از شل کُرن (ksh) و شل سی (csh) را در خود گنجانده است و آن را به ابزاری قدرتمند و چندمنظوره برای وظایف خط فرمان و اسکریپتنویسی تبدیل کرده است. بش به طور گستردهای در توزیعهای مختلف لینوکس، macOS و سایر سیستمعاملهای مشابه یونیکس استفاده میشود و به عنوان شل پیشفرض در بسیاری از سیستمها عمل میکند.
بش در سال 1987 توسط برایان فاکس برای پروژه GNU به عنوان یک نرمافزار رایگان جایگزین شل بورن (sh) توسعه یافت. هدف این بود که به کاربران شل با ویژگیهای بیشتر ارائه شود در حالی که سازگاری با اسکریپتهای موجود sh حفظ شود. در طول سالها، بش از طریق مشارکتهای متعدد توسعهدهندگان تکامل یافته است و رشد آن به محبوبیت روزافزون لینوکس و نرمافزارهای متنباز وابسته بوده است.
در سالهای اولیه، بش به سرعت در میان کاربران و توسعهدهندگان به دلیل قابلیت گسترش و مجموعه غنی از ویژگیهایی که معرفی کرد، محبوب شد. ویژگیهای کلیدی شامل ویرایش خط فرمان، کنترل کارها و قابلیتهای بهبود یافته اسکریپتنویسی بود. در حال حاضر، بش به طور فعال نگهداری میشود و نسخه 5.2 آن در سپتامبر 2021 منتشر شده است. این ابزار همچنان به عنوان یک ابزار استاندارد برای مدیران سیستم، توسعهدهندگان و هر کسی که با سیستمعاملهای مشابه یونیکس کار میکند، باقی مانده است.
بش از چندین شل و زبان برنامهنویسی دیگر الهام گرفته است. نحو و ساختارهای دستوری شل کُرن (ksh) و شل سی (csh) تأثیر زیادی بر طراحی آن داشتهاند. علاوه بر این، ویژگیهای زبان دستوری آن، ادغام با زبانهای برنامهنویسی مانند پایتون و روبی را آسان میکند که اغلب در اسکریپتها برای افزایش عملکرد استفاده میشوند.
بش به طور گستردهای برای اسکریپتنویسی و خودکارسازی وظایف سیستم، مدیریت نصب نرمافزار، انجام وظایف مدیریت سیستم و پردازش دادهها استفاده میشود. این ابزار در جریانهای توسعه بسیاری از برنامههای نرمافزاری و خطوط لوله CI/CD، همچنین در محیطهای ابری و شیوههای DevOps ادغام شده است.
بش از تخصیص متغیر بدون اعلام نوع قبلی پشتیبانی میکند. به عنوان مثال:
name="World"
echo "Hello, $name!"
بش شامل عبارات شرطی مانند if-else برای کنترل جریان است:
if [ "$name" == "World" ]; then
echo "Hello, World!"
else
echo "Hello, Stranger!"
fi
بش اجازه میدهد تا حلقههایی مانند for
، while
و until
ایجاد شود. در اینجا یک مثال از یک حلقه for
آورده شده است:
for i in {1..5}; do
echo "Iteration $i"
done
شما میتوانید توابع را در بش تعریف و فراخوانی کنید:
greet() {
echo "Hello, $1!"
}
greet "User"
بش از جایگزینی دستوری با استفاده از بکتیکها یا $(...)
پشتیبانی میکند:
today=$(date)
echo "Today is $today"
بش از آرایههای یکبعدی با اندیس پشتیبانی میکند:
fruits=("apple" "banana" "cherry")
echo "First fruit: ${fruits[0]}"
بش ویژگیهای دستکاری رشته را مانند استخراج زیررشته ارائه میدهد:
text="Hello World"
echo ${text:6:5} # خروجی "World"
بش اجازه میدهد تا عملیات حسابی پایه با استفاده از $((...))
انجام شود:
result=$((5 + 3))
echo "Result is $result"
شما میتوانید ورودی و خروجی را در بش هدایت کنید:
echo "Hello" > output.txt
بش اجازه میدهد تا از اسناد هیر برای ورودی چندخطی استفاده شود و این کار را برای ارسال رشتههای چندخطی به دستورات آسان میکند:
cat << EOF
This is a multi-line string.
EOF
در حالی که اسکریپتهای بش میتوانند در هر ویرایشگر متنی ویرایش شوند، چندین محیط توسعه یکپارچه (IDE) از بش پشتیبانی میکنند. این شامل Visual Studio Code، Atom، Sublime Text و Eclipse با پلاگینها است.
اسکریپتهای بش به جای کامپایل شدن، تفسیر میشوند و خود مفسر بش اسکریپتها را اجرا میکند. دستور برای اجرای یک اسکریپت به صورت زیر است:
bash script.sh
برای ساخت پروژهها، معمولاً یک Makefile با استفاده از make
ایجاد میشود یا از اسکریپتهای بش برای خودکارسازی وظایفی مانند نصب یا استقرار استفاده میشود.
بش در حوزههای مختلفی مورد استفاده قرار میگیرد، از جمله:
بش نزدیکترین مقایسهها را با زبانهایی مانند پایتون و پرل برای اسکریپتنویسی دارد، در حالی که ممکن است در موارد خاص با زبانهای عمومیتری مانند C یا جاوا مقایسه شود.
بش در تعاملات خط فرمان و وظایف سیستم برتری دارد، در حالی که پایتون برای وظایف برنامهنویسی پیچیده، پردازش داده و توسعه برنامهها بیشتر چندمنظوره است. پایتون یک کتابخانه استاندارد غنی ارائه میدهد که آن را برای برنامههای بزرگ مناسب میسازد.
پرل معمولاً برای پردازش متن و وظایف مدیریت سیستم استفاده میشود؛ با این حال، نحو آن نسبت به بش پیچیدهتر است. بش بر اجرای دستورات متمرکز است، در حالی که پرل بیشتر بر برنامهنویسی متمرکز است.
جاوااسکریپت عمدتاً یک زبان وب سمت کلاینت است، در حالی که بش به عنوان یک مفسر دستوری و پردازشگر اسکریپت برای عملیات سیستم عمل میکند. بش برای توسعه وب مناسب نیست، در حالی که جاوااسکریپت در این حوزه برتری دارد.
هنگام ترجمه اسکریپتهای بش به زبانهای دیگر، اطمینان حاصل کنید که معادلهای دستورات را تأیید کرده و وابستگیها به ویژگیهای سطح سیستم را بررسی کنید. ابزارهایی مانند sh2py
وجود دارند که میتوانند اسکریپتهای شل را به پایتون تبدیل کنند، اما تفاوتهای معنایی باید به دقت مدیریت شوند.
چند ابزار برای ترجمه منبع به منبع وجود دارد، از جمله: