زبان برنامه نویسی Bash

مرور کلی

بش، که مخفف "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های محبوب

در حالی که اسکریپت‌های بش می‌توانند در هر ویرایشگر متنی ویرایش شوند، چندین محیط توسعه یکپارچه (IDE) از بش پشتیبانی می‌کنند. این شامل Visual Studio Code، Atom، Sublime Text و Eclipse با پلاگین‌ها است.

مفسر/کامپایلر

اسکریپت‌های بش به جای کامپایل شدن، تفسیر می‌شوند و خود مفسر بش اسکریپت‌ها را اجرا می‌کند. دستور برای اجرای یک اسکریپت به صورت زیر است:

bash script.sh

ساخت پروژه‌ها

برای ساخت پروژه‌ها، معمولاً یک Makefile با استفاده از make ایجاد می‌شود یا از اسکریپت‌های بش برای خودکارسازی وظایفی مانند نصب یا استقرار استفاده می‌شود.

کاربردهای بش

بش در حوزه‌های مختلفی مورد استفاده قرار می‌گیرد، از جمله:

مقایسه با زبان‌های مشابه

بش نزدیک‌ترین مقایسه‌ها را با زبان‌هایی مانند پایتون و پرل برای اسکریپت‌نویسی دارد، در حالی که ممکن است در موارد خاص با زبان‌های عمومی‌تری مانند C یا جاوا مقایسه شود.

بش در مقابل پایتون

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

بش در مقابل پرل

پرل معمولاً برای پردازش متن و وظایف مدیریت سیستم استفاده می‌شود؛ با این حال، نحو آن نسبت به بش پیچیده‌تر است. بش بر اجرای دستورات متمرکز است، در حالی که پرل بیشتر بر برنامه‌نویسی متمرکز است.

بش در مقابل جاوااسکریپت

جاوااسکریپت عمدتاً یک زبان وب سمت کلاینت است، در حالی که بش به عنوان یک مفسر دستوری و پردازشگر اسکریپت برای عملیات سیستم عمل می‌کند. بش برای توسعه وب مناسب نیست، در حالی که جاوااسکریپت در این حوزه برتری دارد.

نکات ترجمه منبع به منبع

هنگام ترجمه اسکریپت‌های بش به زبان‌های دیگر، اطمینان حاصل کنید که معادل‌های دستورات را تأیید کرده و وابستگی‌ها به ویژگی‌های سطح سیستم را بررسی کنید. ابزارهایی مانند sh2py وجود دارند که می‌توانند اسکریپت‌های شل را به پایتون تبدیل کنند، اما تفاوت‌های معنایی باید به دقت مدیریت شوند.

ابزارهای موجود برای ترجمه منبع به منبع

چند ابزار برای ترجمه منبع به منبع وجود دارد، از جمله: