كيفية استخدام عبارات Bash If (مع 4 أمثلة)
نشرت: 2023-05-08if
then
fi
. أضف الكلمات الأساسية elif
للتعبيرات الشرطية الإضافية ، أو الكلمة الأساسية else
لتعريف مقطع شامل من التعليمات البرمجية يتم تنفيذه في حالة عدم تنفيذ أي جملة شرطية سابقة.تحتاج جميع نصوص Bash غير التافهة إلى اتخاذ قرارات. تسمح عبارة Bash if لبرنامج Linux بطرح الأسئلة ، وبناءً على الإجابة ، قم بتشغيل أقسام مختلفة من التعليمات البرمجية. إليك كيفية عملهم.
ما هو التنفيذ المشروط؟
في جميع نصوص Bash ، باستثناء أبسطها ، عادة ما تكون هناك حاجة لتدفق التنفيذ لاتخاذ مسار مختلف عبر البرنامج النصي ، وفقًا لنتيجة القرار. هذا يسمى التنفيذ المشروط.
تتمثل إحدى طرق تحديد فرع التنفيذ الذي يجب اتخاذه في استخدام عبارة if
. قد تسمع if
العبارات تستدعي if then
عبارات ، أو if then else
. إنها أسماء مختلفة لنفس الشيء.
عبارة if
تقول أنه إذا كان هناك شيء ما صحيحًا ، فافعل ذلك . ولكن إذا كان الشيء خاطئًا ، فافعل ذلك بدلاً من ذلك. يمكن أن يكون "الشيء" أشياء كثيرة ، مثل قيمة المتغير أو وجود ملف أو تطابق سلسلتين.
يعد التنفيذ المشروط أمرًا حيويًا لأي نص برمجي ذي معنى. بدونها ، ستكون محدودًا للغاية فيما يمكنك الحصول على البرنامج النصي الخاص بك للقيام به. ما لم تتمكن من اتخاذ قرارات ذات مغزى ، فلن تكون قادرًا على مواجهة مشاكل العالم الحقيقي وتقديم حلول عملية.
من المحتمل أن تكون عبارة if
هي الوسيلة الأكثر استخدامًا للحصول على التنفيذ الشرطي. إليك كيفية استخدامه في البرمجة النصية لـ Bash.
ذات صلة: كيفية التحقق مما إذا كان الملف موجودًا في نصوص Linux Bash
مثال على عبارة If بسيطة
هذا هو الشكل الأساسي لأبسط عبارة if
:
إذا [هذا-الشرط-صحيح] ثم تنفيذ هذه البيانات فاي
إذا تحول الشرط داخل النص إلى true ، فسيتم تنفيذ أسطر النص في جملة then
. إذا كنت تبحث في نصوص كتبها آخرون ، فقد ترى عبارة if
مكتوبة على النحو التالي:
إذا كان [هذا الشرط صحيحًا] ؛ ثم تنفيذ هذه البيانات فاي
بعض النقاط التي يجب ملاحظتها:
- يختتم بيان
if
بكتابةfi
. - يجب أن تكون هناك مسافة بعد القوس الأول "
[
" وقبل القوس الثاني "]
" للاختبار الشرطي. - إذا كنت ستضع الكلمة الأساسية
then
في نفس السطر مثل الاختبار الشرطي ، فتأكد من استخدام فاصلة منقوطة ";
"بعد الاختبار.
يمكننا إضافة شرط else
اختياري لتنفيذ بعض التعليمات البرمجية إذا ثبت أن اختبار الشرط خاطئ. لا تحتاج جملة else
then
كلمة أساسية.
إذا [هذا-الشرط-صحيح] ثم تنفيذ هذه البيانات آخر قم بتنفيذ هذه العبارات بدلاً من ذلك فاي
يُظهر هذا البرنامج النصي مثالاً بسيطًا على عبارة if
التي تستخدم عبارة else
. يتحقق الاختبار الشرطي مما إذا كان عمر العميل أكبر أو يساوي 21. إذا كان الأمر كذلك ، يمكن للعميل دخول المبنى ، ويتم تنفيذ شرط " then
". إذا لم يكونوا كبارًا بما يكفي ، فسيتم تنفيذ جملة else
، ولا يُسمح لهم بالدخول.
#! / بن / باش customer_age = 25 إذا [$ customer_age -ge 21] ثم صدى "تعال في". آخر صدى "لا يمكنك الدخول". فاي
انسخ النص من الأعلى إلى محرر ، واحفظه كملف يسمى “if-age.sh” ، واستخدم الأمر chmod
لجعله قابلاً للتنفيذ. ستحتاج إلى القيام بذلك مع كل من النصوص التي نناقشها.
chmod + x if-age.sh
لنقم بتشغيل البرنامج النصي الخاص بنا.
./if-age.sh
سنقوم الآن بتحرير الملف واستخدام عمر أقل من 21.
customer_age = 18
قم بإجراء هذا التغيير على البرنامج النصي الخاص بك ، واحفظ التغييرات. إذا قمنا بتشغيله الآن ، فإن الشرط يعيد القيمة false ، ويتم تنفيذ جملة else.
./if-age.sh
شرط elif
يضيف شرط elif
اختبارات شرطية إضافية. يمكنك الحصول على العديد من عبارات elif
كما تريد. يتم تقييمها بدورها حتى يتم العثور على أحدها صحيحًا. إذا لم تثبت صحة أي من اختبارات elif
الشرطية ، فسيتم تنفيذ عبارة else
، إن وجدت.
يطلب هذا البرنامج النصي رقمًا ثم يخبرك ما إذا كان فرديًا أم زوجيًا. الصفر عدد زوجي ، لذا لا نحتاج إلى اختبار أي شيء.
يتم اختبار جميع الأرقام الأخرى بإيجاد مقياس القسمة على اثنين. في حالتنا ، المقياس هو الجزء الكسري من نتيجة القسمة على اثنين. إذا لم يكن هناك جزء كسري ، فإن الرقم يقبل القسمة على اثنين ، بالضبط. لذلك فهو رقم زوجي.
#! / بن / باش صدى-ن "أدخل رقمًا:" اقرأ الرقم إذا كان [$ number -eq 0] ثم صدى "لقد أدخلت الصفر. الصفر هو رقم زوجي." أليف [$ (($ number٪ 2)) -eq 0] ثم صدى "لقد أدخلت $ number. إنه رقم زوجي." آخر صدى "لقد أدخلت $ number. إنه رقم فردي." فاي
لتشغيل هذا البرنامج النصي ، انسخه إلى محرر واحفظه باسم "if-even.sh" ، ثم استخدم chmod لجعله قابلاً للتنفيذ.
دعنا نشغل البرنامج النصي عدة مرات ونتحقق من مخرجاته.
./if-even.sh
كل هذا يعمل بشكل جيد.
أشكال مختلفة من الاختبار الشرطي
الأقواس " []
" التي استخدمناها في اختباراتنا الشرطية هي طريقة مختصرة لاستدعاء برنامج test
. وبسبب ذلك ، فإن جميع المقارنات والاختبارات التي يدعمها test
متاحة لبيان if
الخاص بك.
هذا مجرد عدد قليل منهم:
- ! التعبير : صحيح إذا كان التعبير خاطئًا.
- -n string : صحيح إذا كان طول السلسلة أكبر من الصفر.
- -z string : صحيح إذا كان طول السلسلة صفرًا. أي أنها سلسلة فارغة.
- string1 = string2 : صواب إذا كانت السلسلة 1 هي نفس السلسلة 2.
- سلسلة 1! = سلسلة 2 : صواب إذا لم تكن السلسلة 1 هي نفسها سلسلة 2.
- عدد صحيح 1 - مكافئ عدد صحيح 2 : صحيح إذا كان عدد صحيح 1 يساوي عدديًا عددًا صحيحًا 2
- عدد صحيح 1 - qt عدد صحيح 2 : صحيح إذا كان عدد صحيح 1 أكبر عدديًا من عدد صحيح 2
- عدد صحيح 1 -lt عدد صحيح 2 : صحيح إذا كان عدد صحيح 1 أقل عدديًا من عدد صحيح 2
- -d directory : صحيح إذا كان الدليل موجودًا.
- -e file : صحيح إذا كان الملف موجودًا.
- ملف -s : صحيح إذا كان الملف موجودًا بحجم أكبر من الصفر.
- -r file : صحيح إذا كان الملف موجودًا وتم تعيين إذن القراءة.
- -w file : صحيح إذا كان الملف موجودًا وتم تعيين إذن الكتابة.
- -x file : صحيح إذا كان الملف موجودًا وتم تعيين إذن التنفيذ.
في الجدول ، يمكن أن يشتمل "ملف" و "دليل" على مسارات الدليل ، سواء أكانت نسبية أم مطلقة.
علامة يساوي " =
" واختبار المساواة -eq
ليسا متماثلين. تقوم علامة يساوي بتنفيذ مقارنة نصية بحرف بحرف . يقوم اختبار المساواة بإجراء مقارنة عددية .
يمكننا أن نرى هذا باستخدام برنامج test
في سطر الأوامر.
اختبار "هذه السلسلة" = "هذه السلسلة"
اختبار "هذه السلسلة" = "تلك السلسلة"
اختبار 1 = 001
اختبار 1 -eq 001
في كل حالة ، نستخدم الأمر echo
لطباعة كود الإرجاع للأمر الأخير. الصفر يعني صحيح ، والواحد يعني خطأ.
يعطينا استخدام علامة التساوي " =
" إجابة خاطئة تقارن 1 بـ 001. هذا صحيح ، لأنهما سلسلتان مختلفتان من الأحرف. عدديًا هما نفس القيمة - واحد - لذا يُرجع عامل التشغيل -eq
استجابة حقيقية.
إذا كنت تريد استخدام مطابقة أحرف البدل في الاختبار الشرطي الخاص بك ، فاستخدم القوس المزدوج " [[ ]]
" بناء الجملة.
#! / بن / باش إذا [[$ USER == * ve]] ثم صدى "مرحبًا $ USER" آخر صدى "$ USER لا ينتهي بـ" خمسة " فاي
يتحقق هذا البرنامج النصي من اسم حساب المستخدم الحالي. إذا انتهى بـ " ve
" ، فإنه يطبع اسم المستخدم. إذا لم ينتهي بـ " ve
" ، فإن النص يخبرك بذلك وينتهي.
./if-wild.sh
ذات صلة: الاختبار الشرطي في Bash: if، then، else، elif
متداخلة عبارات If
يمكنك وضع تعليمة if
داخل جملة if
أخرى.
هذا مقبول تمامًا ، ولكن التداخل if
العبارات تجعل الكود أقل سهولة في القراءة ، ويصعب الحفاظ عليه. إذا وجدت نفسك تتداخل في أكثر من مستويين أو ثلاثة من عبارات if
، فربما تحتاج إلى إعادة تنظيم منطق البرنامج النصي الخاص بك.
إليك نص يوضح اليوم كرقم ، من واحد إلى سبعة. واحد يوم الاثنين ، والسابعة يوم الأحد.
يخبرنا بساعات عمل المتجر. إذا كان ذلك في يوم من أيام الأسبوع أو يوم السبت ، فسيتم الإبلاغ عن أن المتجر مفتوح. إذا كان يوم الأحد ، يتم الإبلاغ عن إغلاق المحل.
إذا كان المتجر مفتوحًا ، فإن عبارة if
المتداخلة تُجري اختبارًا ثانيًا. إذا كان اليوم هو الأربعاء ، فإنه يخبرنا أنه مفتوح في الصباح فقط.
#! / بن / باش # احصل على اليوم كرقم 1..7 اليوم = $ (التاريخ + "٪ u") إذا [$ يوم -le 6] ثم ## المحل مفتوح إذا [$ day -eq 3] ثم # الأربعاء نصف يوم صدى "أيام الأربعاء نفتح أبوابها في الصباح فقط." آخر # من أيام الأسبوع العادية والسبت صدى "نحن مفتوحون طوال اليوم." فاي آخر # غير مفتوح يوم الأحد صدى "إنه يوم الأحد ، لقد أغلقنا". فاي
انسخ هذا البرنامج النصي في محرر ، واحفظه كملف يسمى "if-shop.sh" ، واجعله قابلاً للتنفيذ باستخدام الأمر chmod
.
قمنا بتشغيل البرنامج النصي مرة واحدة ثم قمنا بتغيير ساعة الكمبيوتر لتكون يوم الأربعاء ، وأعدنا تشغيل البرنامج النصي. ثم قمنا بتغيير اليوم إلى يوم الأحد وقمنا بتشغيله مرة أخرى.
./if-shop.sh
./if-shop.sh
./if-shop.sh
ذات صلة: كيفية استخدام Double Bracket Conditional Tests في Linux
الحال إذا
التنفيذ المشروط هو ما يجلب القوة للبرمجة والبرمجة النصية ، وقد تكون عبارة if
المتواضعة هي الطريقة الأكثر استخدامًا لتبديل مسار التنفيذ داخل الكود. لكن هذا لا يعني أنه الحل دائمًا.
تعني كتابة رمز جيد معرفة الخيارات التي لديك وأيها أفضل الخيارات لاستخدامها من أجل حل مطلب معين. إن عبارة if
رائعة ، لكن لا تجعلها الأداة الوحيدة في حقيبتك. على وجه الخصوص ، تحقق من بيان case
الذي يمكن أن يكون حلاً في بعض السيناريوهات.
ذات صلة: كيفية استخدام بيانات الحالة في نصوص Bash