في هذا الموضوع، سنناقش أساسيات بيانات الحالة وكيفية استخدامها في برامج Bash النصية.
بيان حالة Bash هو أبسط شكل من أشكال IF-THEN-ELSE مع العديد من عناصر ELIF. يؤدي استخدام بيان الحالة إلى جعل نص bash الخاص بنا أكثر قابلية للقراءة وأسهل في الصيانة. يتم تطبيقها بشكل عام لتبسيط الشروط المعقدة التي لها خيارات متعددة ومختلفة.
يتبع بيان حالة Bash منطقًا مشابهًا لبيان تبديل Javascript أو C. هناك اختلاف بسيط، على النحو التالي:
- يأخذ بيان حالة Bash القيمة مرة واحدة ويختبر تلك القيمة عدة مرات. ويتوقف عن البحث عن النمط بمجرد العثور عليه وتنفيذ البيان المرتبط به، وهو ما يكون عكسه تقريبًا في حالة بيان التبديل C.
بناء جملة بيان الحالة
بناء جملة بيان حالة bash موضح أدناه:
case expression in pattern_1) statements ;; pattern_2) statements ;; pattern_3|pattern_4|pattern_5) statements ;; pattern-n) statements ;; *) statements ;; esac
هناك بعض النقاط الرئيسية لبيانات حالة bash:
- تبدأ كل عبارة حالة في bash بالكلمة الأساسية 'case'، متبوعة بتعبير الحالة والكلمة الأساسية 'in'. يتم إغلاق بيان الحالة بواسطة الكلمة الأساسية 'esac'.
- يمكننا تطبيق أنماط متعددة مفصولة بـ | المشغل أو العامل. يشير عامل التشغيل ) إلى إنهاء قائمة الأنماط.
- يُشار إلى النمط الذي يحتوي على العبارات على أنه عبارة، ويجب إنهاؤه بفاصلة منقوطة مزدوجة (؛؛).
- يتم استخدام رمز النجمة (*) كنمط نهائي لتحديد الحالة الافتراضية. يتم استخدامه كحالة افتراضية عند استخدامه كحالة أخيرة.
كيف تعمل
أولاً، يقوم بيان الحالة بتوسيع التعبير ويحاول المطابقة مع كل من الأنماط المضمنة. عندما يجد تطابقًا، يتم تنفيذ جميع العبارات المرتبطة حتى الفاصلة المنقوطة المزدوجة (؛؛). بعد المطابقة الأولى، تنتهي الحالة بحالة الخروج لآخر بيان تم تنفيذه.
إذا لم يكن هناك نمط مطابق، فإن حالة الخروج للحالة هي صفر. وبخلاف ذلك، فإن حالة الإرجاع هي حالة الخروج من البيانات المنفذة.
إذا تم استخدام نمط النجمة الافتراضي، فسيتم تنفيذه في حالة عدم وجود نمط مطابق.
دعونا نحاول فهم هذه الآلية بمساعدة بعض الأمثلة:
مثال 1
في هذا المثال، قمنا بتحديد سيناريو بسيط لتوضيح استخدام بيان الحالة.
سكريبت باش
#!/bin/bash echo 'Do you know Java Programming?' read -p 'Yes/No? :' Answer case $Answer in Yes|yes|y|Y) echo 'That's amazing.' echo ;; No|no|N|n) echo 'It's easy. Let's start learning from javatpoint.' ;; esac
انتاج |
مثال 2
في هذا المثال، قمنا بتحديد سيناريو مدمج حيث توجد أيضًا حالة افتراضية عند عدم العثور على حالة مطابقة سابقة.
مخطط فئة جافا
سكريبت باش
#!/bin/bash echo 'Which Operating System are you using?' echo 'Windows, Android, Chrome, Linux, Others?' read -p 'Type your OS Name:' OS case $OS in Windows|windows) echo 'That's common. You should try something new.' echo ;; Android|android) echo 'This is my favorite. It has lots of applications.' echo ;; Chrome|chrome) echo 'Cool!!! It's for pro users. Amazing Choice.' echo ;; Linux|linux) echo 'You might be serious about security!!' echo ;; *) echo 'Sounds interesting. I will try that.' echo ;; esac
انتاج |
لقد قمنا بتشغيل البرنامج النصي بثلاثة مدخلات مختلفة، وتحقق من الإخراج أدناه: