9. Case
دستورcase
یک مجموعه کامل از دستورات
if .. then .. else
را انجام میدهد. واقعاً ترکیب ،کاملاً سادهای دارد:
talk.sh
#!/bin/sh echo "Please talk to me ..." while : do read INPUT_STRING case $INPUT_STRING in hello) echo "Hello yourself!" ;; bye) echo "See you again!" break ;; *) echo "Sorry, I don't understand" ;; esac done echo echo "That's all folks!"
بسیارخوب ، بهترین شیرین زبان جهان نیست، این فقط یک مثال است!
سعی کنید اجرایش کنید و ببینید چطور کار میکند...
$ ./talk.sh
Please talk to me ...
hello
Hello yourself!
What do you think of politics?
Sorry, I don't understand
bye
See you again!
That's all folks!
$
ترکیب دستوری آن کاملاً ساده است:
سطر خود
case
همیشه به همان شکل است، وبه معنی آن است که داریم مقدار متغیر INPUT_STRING
را بررسی میکنیم.
بعد گزینههای مورد نظر لیست شدهاند، و در ادامه هر کدام یک پرانتز سمت راست به صورت hello)
و bye)
آمده است.
این به آن معنی است که اگر محتوای
INPUT_STRING
با hello
مطابقت میکند، بعد قسمت کد تا رسیدن به سمیکالن ها اجرامیشود.
اگر محتوی متغیر INPUT_STRING
با کلمه bye
مطابقت کند، سپس پیغام خداحافظی نمایش یافته و از حلقه خارج میشود. توجه نمایید که اگر میخواستیم به طور کلی از اسکریپت خارج شویم، میبایست از دستور exit
به جای فرمان break
استفاده میکردیم.
در این جا سومین گزینه *)
پیشفرض تمام شرطهای دیگر است، ضروری نیست امااغلب، حتی اگر گمان میکنیم تمام مقایر بررسی متغیر را میدانیم، برای اشکالزدایی مفید است.
تمام ساختار case با کلمه esac
خاتمه مییابد(وارونه !case )
بعد هم حلقه while را با یک done
تمام میکنیم.
تمام پیچیدگی شرایط case به همین اندازه است، امااین ساختار میتواند ابزار سودمند و قدرتمندی باشد. این ساختار غالباً برای تجزیه پارامترهای ارسال شده به اسکریپت پوسته، در میان سایر اعمال، به کارمیرود.