عبارت‌های شرطی برای هر زبان برنامه‌نویسی اسکریپت نویسی و با امکانات کامل، گزینه‌ای ضروری محسوب می‌شوند. در بخش سوم و پایانی این سلسله آموزش‌های شل اسکریپت با دستورهای if و else در bash آشنا می‌شوید و شیوه استفاده از آن‌ها را می‌آموزید. در این مقاله فرض ما بر این است که قبلاً پوشه شل اسکریپت خود را بر مبنای آن جه در بخش اول این راهنما آموختیم پیکربندی کرده‌اید.

دستور if

یک عبارت شرطی برای اجرای اقدامات خاصی در صورت درست بودن یا نادرست بودن یک شرط استفاده می‌شود. در شل اسکریپت‌ها این وضعیت از طریق دستور if تعریف می‌شود. در ادامه‌ی دستورِ if عبارتی که قرار است بررسی شود می‌آید. این عبارت می‌تواند کد خروج (exit) اجرای یک دستور، یک عبارت ریاضیاتی، و یا هر چیز دیگری باشد. زمانی که با کدهای exit کار می‌کنیم، این دستور کاملاً سرراست است:

if ls folder
then
echo "Folder exists"
fi

اگر پوشه وجود داشته باشد دستور echo اجرا می‌شود، چون کد خروج 0 به عنوان موفقیت‌آمیز بازگشت یافته است. در غیر این صورت اگر پوشه وجود نداشته باشد، متنی نمایش نخواهد یافت. همه عبارت‌های if باید دارای دستور then باشند و با یک fi خاتمه یابند. اگر با کدهای exit کار نمی‌کنید و برای مثال می‌خواهید یک عبارت ریاضیاتی را بررسی کنید، باید از دستور test استفاده کنید. عملگرهای زیر در شل اسکریپت برای مقایسه اعداد استفاده می‌شوند:

-eq برابر است یا
-ne برابر نیست با
-lt کمتر از
-le کمتر مساوی با
-gt بزرگ‌تر از
-ge بزرگ‌تر یا مساوی

دستورهای test را می‌توان به دو روش نوشت:

if test 4 -gt 3
یا
if [4 -gt 3]

هر دو دستور فوق نتیجه یکسانی دارند و نیازمند then و if نیز هستند. مثال:

if [20 -lt 10]
then
echo "What?"
fi

در کد فوق عبارت ?What هرگز برای کاربر نمایش نمی‌یابد، زیرا 20 بزرگ‌تر از 10 است. اکنون اگر بخواهیم در صورت نادرست بودن عبارت شرطی یک پیام به کاربر نمایش دهیم چه باید بکنیم؟

دستور else

دستور else چنان که از نامش مشخص است، یک مسیر جایگزین برای دستور if اضافه می‌کند. اساس کار آن به صورت زیر است:

if [20 -lt 10]
then
   echo "What?"
else
   echo "No, 20 is greater than 10."
Fi

علاوه بر عبارت‌های ریاضیاتی می‌توان به مقایسه رشته‌ها با if/else نیز پرداخت. این کار نیازمند دستور زبانی است که تا حدودی متفاوت است؛ اما همچنان از دستورهای تست یا [] استفاده می‌کند. ساختار آن چنین است:

همچنین روشی برای دانستن مشخصات فایل‌ها وجود دارد:

If های تو در تو

از عبارت‌های if می‌توان درون عبارت‌های if دیگر نیز استفاده کرد و بدین ترتیبت if تو در تو ایجاد می‌شود. در مثال زیر این وضعیت به کمک ورودی ارائه شده از سوی کاربر با استفاده از دستور read بررسی می‌شود:

#!/bin/bash
echo "Input which file you want created"
read file
if [-f $file]
then
echo "The file already exists"
else
   touch $file
   if [-w $file]
   then
      echo "The file was created and is writable"
   else
      cho "The file was created but isn't writable"
   fi
fi

اسکریپت نمونه

در مثال زیر تلاش می‌کنیم اسکریپت پشتیبان‌گیری فایل‌های خود را که در بخش‌های قبلی این راهنما معرفی کردیم بهبود ببخشیم. این نسخه از اسکریپت اقدام به تست کردن پوشه پشتیبانی می‌کند تا ببیند آیا پوشه وجود دارد یا نه و اگر وجود نداشت امکان ایجاد آن را دارد. در ابتدا اسکریپت را ایجاد می‌کنیم:

touch ~/bin/filebackup3
chmod +x ~/bin/filebackup3
nano ~/bin/filebackup3

و سپس آن را ویرایش می‌کنیم:

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

سخن پایانی

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

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *