لینوکسی بشیم: کار با شرط‌ها در bash


امیدوارم تا این‌جا اطلاعات خوبی از بش تو این دنباله کسب کرده باشید و کنارش تمرین هم انجام بدید. تو این مطلب میخوام کمی مطالب پیشرفته‌تر رو بگم. از جمله if و case در بش. چون کمی پیشرفته‌تر شدیم شاید برای برنامه‌نویس‌ها لازم نباشه اما تو نوشتن یا فهمیدن اسکریپت‌ها کمکشون میکنه.‌ کسایی هم که میخوان متخصص لینوکس یا دواپس بشن براشون حتما مفیده. اونایی هم که سیستم لینوکسی دارن فک کنم خیلی به دردشون نخوره.

تو این نوشته فرض بر اینه که آشنایی ابتدایی با بش و متغیرهاش تو لینوکس دارید. میتونید مطالب قبلی رو بخونید. همچنین لازمه آشنایی اولیه با یه زبون برنامه‌نویسی داشته باشید؛ در حد if و switch case.

راستش رو بگم این نوشته یه کم احساس زشتی میکنه؛ چون جای اصلیش توی اسکریپت هست ولی ما فعلا تو خط فرمان می‌نویسیم. حالا بگذریم. بریم سر اصل مطلب. اول با if شروع کنیم. اول کلمه if رو می‌نویسیم بعد دو تا از اینا [ ] ‌باز می‌کنیم (بهش میگن square brackets) و داخلش شرط رو مینویسیم؛ مثلا میخوام ببینم مقدار متغیرم برابر یه چیز خاص هست یا نه:

دقت کنید گذاشتن فاصله خیلی مهمه. بعد از if و قبل و بعد از هر کدوم از براکت‌ها باید فاصله باشه. در غیر این صورت خطا میگیریم. همچنین توجه کنید برای مقایسه دو رشته از == استفاده می‌کنیم. برای نامساوی بودن هم از ‌=! استفاده میشه.‌ حالا باید تو خط بعدی کلمه then نوشته بشه. الان من بعد از هر خط یه ENTER زدم. در این حالت بش منتظر میمونه تا بلوک تموم شه. میتونیم به جای رفتن به خط بعد از ; هم استفاده کنیم:

بعد از then میتونیم کارهایی که میخوایم انجام بشه رو بنویسیم. این تو هر چی میشه نوشت. در ضمن، لازم نیست بعد از then به خط بعدی بریم. البته اگه چن تا دستور میزنید بعد هر دستور باید برید خط بعد با ENTER یا از اینا ; بذارید (کلا تو بش این طوریه). بعد از این که دستورهای ما تموم شد میریم خط بعدی یا ; میذاریم و در انتها عبارت fi رو می‌نویسیم. دنبال معنیش نگردید. بر عکس if هست. عجیبه یه کم قبول دارم. میتونیم قبل از پایان else یا elif بذاریم تا شرط‌های دیگه رو هم بررسی کنیم:

بعد از elif مثل if عمل می‌کنیم.

بعد از دیدن ساختار کلی کمی هم راجع‌ به شرط‌ها بگیم. مقایسه دو تا رشته رو گفتیم که با == یا =! انجام میشه. برای اعداد قضیه فرق داره. مساوی بودن رو با eq- یا همون == میشه بررسی کرد:

نامساوی بودن رو با neq- یا =! بررسی می‌کنیم. برای بزرگ‌تر بودن از gt- که مخفف greater than است استفاده می‌کنیم:

برای کوچک‌تر از lt- استفاده میکنیم. lt مخفف less than هست. دو تا چیز دیگه هم هست؛ le و ge که فک کنم معلومه چی هستن.

جدای از اعداد و رشته‌ها، تو بش مهمه که کار با فایل‌ و پوشه رو راحت انجام بدیم. برای این یه سری بررسی‌ها برای این‌جور کارا گذاشتن؛ مثلا میشه با d- فهمید یه پوشه وجود داره یا نه:

بعد از ‌‌d- مسیر پوشه رو بهش دادم. یه نکته‌ای به نظرم اومد بگم اینجا. اونم اینه که وقتی تو جمله از اینا ' میذاریم دورش باید از اینا " بذاریم تا اشتباه نشه. با f- هم میتونیم ببینیم فایلی وجود داره یا نه. اونم مثل پوشه باید مسیر کامل یا نسبی رو بهش بدید.

بعد از ‌if میریم سراغ case. وقتی میخوایم چند تا شرط رو بررسی کنیم راحت‌تره از case استفاده کرد. ساختار کلی رو ببینید:

اول case میاد (این‌جا دیگه خبری از switch نیست) و یه متغیر که میخوایم بررسیش کنیم. بعدش in میاد و بعدش گزینه‌ها رو مینویسیم. هر گزینه با ( به اتمام میرسه و خطوط بعدیش هر دستوری بخوایم مینویسیم. آخرش هم دو تا نقطه ویرگول میذاریم (این بار تنبلی نکردم و اسم علامت رو نوشتم ^__^ ). خوبه بعد از اتمام گزینه‌ها یه گزینه با * هم بذاریم که جای دیفالت باشه. دنبال break هم نباشین که لازم نیست؛ چون رفتار case این‌طوریه که اولین match رو انجام میده و تمام. آخرش هم esac میاد. بر عکس caseه. دیگه آخر خلاقیته!

این مطلبم تموم شد. این شرط‌ها رو بعدا ان شاء الله می‌بریم توی اسکریپت و بهتر استفاده میشن. امیدوارم این نوشته مفید بوده باشه. اگر سوال یا نظری دارید این پایین بپرسید.

قسمت قبلی

قسمت بعدی