بیژن حجازی
بیژن حجازی
خواندن ۶ دقیقه·۳ سال پیش

ویژگی های زبان Bash

زبان Bash به عنوان زبان پیش فرض سیستم عامل های بر اساس Unix ویژگی های خاص خودشو داره.
زبان Bash به عنوان زبان پیش فرض سیستم عامل های بر اساس Unix ویژگی های خاص خودشو داره.

مقدمه

زبان ‌Bash یکی از زبان های پرکاربرد به خصوص در سیستم عامل های بر اساس Unix عه. در عین شباهت به زبان های رایجی مثل Python، این زبان ویژگی های خاص و تا حدودی عجیبی هم داره. تسلط به زبان Bash می تونه قدرت باورناپذیری به ما بده به خصوص زمانی که داریم با سرور کار می کنیم. تو این مقاله به بررسی چند تا از ویژگی های جالب زبان Bash می پردازیم.

داده ها جنس ندارن

در زبان Bash داده ها جنس ندارن! شاید فکر کنی که خوب این طوری که نمیشه! جواب اینه که زبان ‌Bash خودش هنگام محاسبات میاد و بررسی میکنه که آیا جنس داده ها برای اون عملیات مناسب هست یا نه. حتی تو error هایی که میده ممکنه اشاره کنه که متغیر داده شده عدد نیست ولی در هر صورت جنس داده ها دقیقا مشخص نیست.

رشته ها می تونن بدون quotation mark باشن

منظور از quotation mark ها همون ' و " عه که تو اکثر زبان ها وقتی میخایم یک رشته رو تعریف کنیم برای این که با متغیر ها اشتباه نشن مقدار رشته رو داخل quotation mark میذاریم. مثلا تو زبان /p>

var name = &quotbizhan&quot

ولی تو زبان bash خیلی راحت میگیم:

name=bizhan

البته می تونیم داخل quotation mark هم قرارش بدیم ولی الزامی نیست. اون جایی مجبور میشیم یک رشته رو داخل quotation mark قرار بدیم که توش space داره. مثلا:

name='bizhan hejazi'

چیزی به نام return نداریم

تو زبان های معروف وقتی که یک function کارش رو انجام میده میتونه حاصل نهایی همه محاسباتش رو به صورت یک مقدار return کنه ولی توی Bash کلیدواژه ای به اسم return نداریم! برای شبیه سازی return می تونیم حاصل نهایی محاسبات function رو داخل یک global variable ذخیره کنیم. یا این که می تونیم یک رشته رو echo بگیریم که مثلا بگه با موفقیت انجام شد.

مقادیر عددی رو با استفاده از flag ها مقایسه میکنیم نه عملگر ها!

تو زبان های شناخته شده ای مثل PHP وقتی میخایم دو تا مقدار عددی رو با هم مقایسه کنیم از عملگر های شبیه به ریاضی مثل > و یا مثلا == استفاده میکنیم. تو Bash برای همین منظور باید از flag ها استفاده کنیم. flag ها عملگر هایی هستن که اولشون یک - (اسم این علامت hyphen عه) قرار داده و بعد از hyphen عبارت دو حرفی ای مثل eq. مثلا فلگ eq- برای بررسی برابر بودن دو مقدار عددی استفاده میشه. بذار با مثال توضیح بدم:

# in PHP if ($x > 3) { echo &quotOK&quot } # in Bash if [ $x -gt 3 ] then echo OK fi

بلوک هایی مثل if و for رو با کلیدواژه ها می بندیم

عادت کردیم که تو اکثر زبان ها بلوک هایی مثل if رو با { } مشخص کنیم. یا مثلا در زبان Python از indentation استفاده میشه. ولی تو زبان Bash بلاک های کد رو مشخصا با یک کلیدواژه می بندیم (البته برخی جا ها از { } هم میشه استفاده کرد مثلا تو تعریف function ها). مثلا برای بستن و اعلام تمام شدن بلاک if از کلیدواژه fi استفاده میکنیم.

if [ 3 -eq $x ] then echo OK fi

همین داستان برای loop ها هم تکرار میشه و loop ها رو باید با کلیدواژه done خاتمه بدیم:

x=-3 while [ $x -le 4 ] do echo OK let x=$x+1 done

شاید در نگاه اول این اضافه کاری به نظر برسه ولی وقتی متوجه میشیم که میشه زبان Bash رو به صورت خط به خط مستقیما داخل terminal نوشت می فهمیم این ویژگی خیلی هم کاربردی و خوبه.

متغیر با مقدار متغیر فرق داره!

تو زبان Bash برای دسترسی به مقدار یک متغیر باید حرف $ رو قبل از اسم متغیر قرار بدیم. این یعنی اگه مثلا اسم متغیر ما name باشه و بگیم که echo name چیزی که برامون پرینت گرفته میشه مقدار متغیر name نیست بلکه خود عبارت name عه!

name=bizhan echo name # name echo $name # bizhan

عملگر ضرب *\ هست نه *

از اون جایی که زبان Bash از * (اسم این علامت asterisk یا به طور ساده star عه) به عنوان یک wildcard استفاده میکنه (wildcard علامتی هست که میتونه به مفهوم هر چیزی باشه) برای ضرب کردن دو مقدار عددی در هم باید یک \ قبلش قرار بدیم که خنثی اش کنه:

x=3 y=4 expr $x \* $y

محاسبات اکثرا با bc انجام میشه

در حالی که عادت کردی خیلی راحت با زبان مهربونی مثل Python پیچیده ترین محاسبات رو عین درس جبر انجام بدی، در Bash محاسبات اکثرا با برنامه ای به اسم bc صورت می گیره که مخفف bench calculator هست. bc یک برنامه داخلی Unix عه که معادلات و محاسبات رو ازت میگیره و حاصلش رو بهت میده. نکته جالب این جاست که داخل خود کد bash هم میتونی از این bc استفاده کنی.

if [ `echo '3 + 3' | bc` -eq 6 ] then echo OK fi

استفاده از دستورات ترمینال داخل کد

این هم یکی دیگه از چیزای جالبه. می تونیم دستوراتی که به صورت روتین داخل ترمینال وارد میکنیم رو داخل کد bash بیاریم و با حاصلش کار کنیم. مثلا میخایم اسم تک تک فایل های موجود در directory حاضر رو پرینت بگیریم:

for x in `ls` do echo $x done

کار کردن با آرایه ها عذابه!

این یکی از رو مخ ترین ویژگی های Bash هست. کار کردن با آرایه ها واقعا دردناکه. مثلا برای دسترسی به مقدار یکی از عناصر یک آرایه با از {}$ استفاده کنی. بذار چند تا مثال تو کد توضیح بدم:

# declaration names=(bizhan behrad hazhir sina) # length echo ${#names[*]} # reading echo ${names[0]}

تقسیم به صورت پیش فرض حاصل رو به پایین گرد میکنه!

شاید فکر کنی که حاصل تقسیم ۵ بر ۲ میشه ۲.۵ ولی تو Bash میشه ۲! بش به صورت پیش فرض حاصل تقسیم رو به نزدیک ترین عدد صحیح و به پایین گرد میکنه! برای این که ۲.۵ دریافت کنی باید از bc استفاده کنی و آپشن l- رو هم بهش بدی. که در این صورت هم یک قطاری از صفر بعد از ۲.۵ ردیف میکنه برات!

expr 5 / 2 # 2 echo '5 / 2' | bc -l # 2.50000000000000000000

تو پایتان ۲ هم تقسیم ۵ بر ۲ میشد ۲ ولی از پایتان ۳ به بعد دیگه تقسیم رو مثل جبر و به صورت دقیق انجام دادن.

حلقه for خیلی دوست داشتنی تره

بر خلاف زبانی مثل C که حلقه for اش عملا همون while عه، این جا توی Bash همه چیز به صورت خودکار حساب میشه و خیلی راحت تره. در عین حال احتمال خطا هم کمتره. حلقه for در پایتان هم همین طوری مثل Bash کار میکنه:

# in C for (int i=0; i < 10; i++) { print(i) } # in Bash for x in my_list do echo $x done # in Python for x in my_list: print(x)

نتیجه گیری

تو این مقاله سعی کردم چند تا از ویژگی های عجیب Bash رو توضیح بدم. با وجود همه این ها Bash یار غار سیستم عامل Unix عه و Unix هم اساس دنیای وسیع اینترنت. بلد بودن Bash قدرت اعجاب آوری به یک برنامه نویس میده چرا که می تونه با Bash خیلی از کار ها رو اتوماتیک کنه. تسلط به Bash باعث میشه زبان های سطح بالاتری مثل Python رو هم بهتر درک کنیم. در نهایت خوشحال میشم که نظرت رو به صورت یک comment با من به اشتراک بذاری.

برنامه نویسیلینوکسیونیکسbashپایتون
سلام! نوشتن به منزله مطالعه «خود» هست. من بیشتر تو زمینه برنامه نویسی و روان شناسی مطلب میذارم. خوشحال میشم نظرات تون رو باهام در میون بذارین.
شاید از این پست‌ها خوشتان بیاید