منبع اصلی نوشتار زیر در این لینک قرار دارد

آشنایی با BASH – قسمت شانزدهم (عبارات شرطی)

در شل اسکریپت عبارات شزطی توسط دو دستور test یا ] اجرا می شوند. با عبارات شرطی بسته به شرایط فعالیت خاصی صورت می گیرد. به طور مثال اگر تعداد ورودی کاربر صفر باشد، پیغامی مناسب و یا اگر تعداد ورودی کاربر بیش از اندازه باشد، پیغامی مناسب نشان داده خواهد شد. if در شل اسکریپت بسیار انعطاف پذیر تر نسب به زبان های برنامه سازی مانند C است. عبارت if می تواند تنها یک if باشد یا به صورت if..else…fi و یا به صورت if…elif…fi باشد.به هر حال عبارت شرطی if با if آغاز و با fi خاتمه می یابد. شکل زیر ساختار کلی if را نشان می دهد.

ساختار بالا بسیار واضح است. ساختار با if آغاز و با fi به پایان می رسد و به جز else بعد مابقی if,elif ها then می اید. کد زیر مثالی ساده است که دو متغیر a و b را با هم مقایسه می کند.

دستور test به صورت زیر برای ارزیابی عبارات مورد استفاده قرار می گیرد.

test CONDITION

OR

test CONDITION&&COMMAND_IF_TRUE

OR

test CONDITION||COMMAND_IF_FALSE

OR

test CONDITION && COMMAND_IF_TRUE || COMMAND_IF_FALSE

حالت دوم با استفاده از && در صورتی که حتمن نتیجه ارزیابی عبارت توسط test درست (true) باشد، دستور اجرا می شود و سومین حالت با استفاده از || در صورتی که نتیجه ارزیابی نادرست (false) باشد، دستور اجرا می شود. چهارمین حالت نیز اگر نتیجه درست باشد، COMMAND_IF_TRUE و اگر نادرست باشد، COMMAND_IF_FALSE اجرا خواهد شد. در یونیکس ها از دو براکت باز و بسته نیز که داخل آن عبارت شرطی قرار می گیرد استفاده می شود که همانی است که در شکل های بالا در دستور if استفاده نموده ایم. در مورد اعمال مقایسه ای (عملگرهای مقایسه) نیز:

  • eq- : که مخفف equal است و در صورتی که عبارت سمت راست با عبارت سمت چپ برابر باشد.
  • ne- : مخفف not equal
  • gt- : مخفف greater than
  • ge- : مخفف greater or equal
  • lt- : مخفف less than
  • le- : مخفف less or than

و همچنین عملگرهای باینری

  • ! : نتیجه را معکوس می کند.
  • a- : عملگر and باینری.
  • o- : عملگر or باینری.

همچنین از نماد هایی برای تست برخی از عبارات استفاده می شود. به طور مثال برای بررسی وجود یک فایل در یک مسیر مشخص از نماد f- در قسمت عبارت شرطی استفاده می کنیم. که از این فایل می توانید فهرستی کامل از آنها را دانلود کنید. به طور مثال برای بررسی اینکه آیا فایل file1 در زیر دایرکتوری home/amirnami/ وجود دارد و یا نه و چاپ پیغام مناسب می توان از دستور زیر استفاده کرد.

test -f /home/amirnami/file1 && echo “File \”file1\” exit” || echo “File \”file1\” not found

OR

if test -f /home/amirnami/file1

then

“echo “File \”file1\” exit

else

“echo “File \”file1\” not found

fi

OR

if[-f /home/amirnami/file1]; then

“echo “File \”file1\” exit

else

“echo “File \”file1\” not found

fi

  • مفهوم file1 -nt file2 : یعنی اگر file1 جدیدتر از فایل file2 باشد. (به عبارتی Timestamp یا تاریخ جدید تری داشته باشد.)
  • مفهوم file1 -ot file2 : یعنی اگر فایل file1 قدیمی تر از فایل file2 باشد.



برچسب ها : , , , , , , , , , , ,