كيفية استخدام عبارات Bash If (مع 4 أمثلة)

نشرت: 2023-05-08
كمبيوتر محمول Linux يعرض نافذة طرفية بنمط كرة أرضية في الخلفية وعلامة مائية ثنائية
fatmawati achmad zaenuri / Shutterstock
استخدم عبارة Linux Bash if لإنشاء تعبيرات شرطية ببنية if then fi . أضف الكلمات الأساسية elif للتعبيرات الشرطية الإضافية ، أو الكلمة الأساسية else لتعريف مقطع شامل من التعليمات البرمجية يتم تنفيذه في حالة عدم تنفيذ أي جملة شرطية سابقة.

تحتاج جميع نصوص Bash غير التافهة إلى اتخاذ قرارات. تسمح عبارة Bash if لبرنامج Linux بطرح الأسئلة ، وبناءً على الإجابة ، قم بتشغيل أقسام مختلفة من التعليمات البرمجية. إليك كيفية عملهم.

ما هو التنفيذ المشروط؟

في جميع نصوص Bash ، باستثناء أبسطها ، عادة ما تكون هناك حاجة لتدفق التنفيذ لاتخاذ مسار مختلف عبر البرنامج النصي ، وفقًا لنتيجة القرار. هذا يسمى التنفيذ المشروط.

تتمثل إحدى طرق تحديد فرع التنفيذ الذي يجب اتخاذه في استخدام عبارة if . قد تسمع if العبارات تستدعي if then عبارات ، أو if then else . إنها أسماء مختلفة لنفس الشيء.

9 أمثلة على الحلقات في نصوص لينكس باش
ذات صلة 9 أمثلة على الحلقات في لينكس باش سكربت

عبارة 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 

استخدام chmod لجعل نص برمجي قابل للتنفيذ

لنقم بتشغيل البرنامج النصي الخاص بنا.

 ./if-age.sh 

تشغيل البرنامج النصي if-age.sh مع تعيين متغير العمر على 25

سنقوم الآن بتحرير الملف واستخدام عمر أقل من 21.

 customer_age = 18

قم بإجراء هذا التغيير على البرنامج النصي الخاص بك ، واحفظ التغييرات. إذا قمنا بتشغيله الآن ، فإن الشرط يعيد القيمة false ، ويتم تنفيذ جملة else.

 ./if-age.sh 

تشغيل البرنامج النصي if-age.sh مع تعيين متغير العمر على 18

شرط elif

يضيف شرط elif اختبارات شرطية إضافية. يمكنك الحصول على العديد من عبارات elif كما تريد. يتم تقييمها بدورها حتى يتم العثور على أحدها صحيحًا. إذا لم تثبت صحة أي من اختبارات elif الشرطية ، فسيتم تنفيذ عبارة else ، إن وجدت.

يطلب هذا البرنامج النصي رقمًا ثم يخبرك ما إذا كان فرديًا أم زوجيًا. الصفر عدد زوجي ، لذا لا نحتاج إلى اختبار أي شيء.

يتم اختبار جميع الأرقام الأخرى بإيجاد مقياس القسمة على اثنين. في حالتنا ، المقياس هو الجزء الكسري من نتيجة القسمة على اثنين. إذا لم يكن هناك جزء كسري ، فإن الرقم يقبل القسمة على اثنين ، بالضبط. لذلك فهو رقم زوجي.

 #! / بن / باش

صدى-ن "أدخل رقمًا:"

اقرأ الرقم

إذا كان [$ number -eq 0]
ثم
  صدى "لقد أدخلت الصفر. الصفر هو رقم زوجي."
أليف [$ (($ number٪ 2)) -eq 0]
ثم
  صدى "لقد أدخلت $ number. إنه رقم زوجي."
آخر
  صدى "لقد أدخلت $ number. إنه رقم فردي."
فاي

لتشغيل هذا البرنامج النصي ، انسخه إلى محرر واحفظه باسم "if-even.sh" ، ثم استخدم chmod لجعله قابلاً للتنفيذ.

دعنا نشغل البرنامج النصي عدة مرات ونتحقق من مخرجاته.

 ./if-even.sh 

تشغيل البرنامج النصي 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 

تشغيل البرنامج النصي if-wild.sh الذي يعرض بحث أحرف البدل في الاختبار الشرطي لتعليمة if

ذات صلة: الاختبار الشرطي في 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 

تشغيل البرنامج النصي if-shop.sh مع ضبط ساعة الكمبيوتر على يوم من أيام الأسبوع ، ثم يوم الأربعاء ، ثم يوم الأحد

ذات صلة: كيفية استخدام Double Bracket Conditional Tests في Linux

الحال إذا

التنفيذ المشروط هو ما يجلب القوة للبرمجة والبرمجة النصية ، وقد تكون عبارة if المتواضعة هي الطريقة الأكثر استخدامًا لتبديل مسار التنفيذ داخل الكود. لكن هذا لا يعني أنه الحل دائمًا.

تعني كتابة رمز جيد معرفة الخيارات التي لديك وأيها أفضل الخيارات لاستخدامها من أجل حل مطلب معين. إن عبارة if رائعة ، لكن لا تجعلها الأداة الوحيدة في حقيبتك. على وجه الخصوص ، تحقق من بيان case الذي يمكن أن يكون حلاً في بعض السيناريوهات.

ذات صلة: كيفية استخدام بيانات الحالة في نصوص Bash