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

النقاط الرئيسية

استخدم عبارة Linux Bash if لبناء تعبيرات شرطية باستخدام
if
then
fi

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



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


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

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

إحدى الطرق لتحديد فرع التنفيذ الذي يجب اتخاذه هي استخدام if بيان. قد تسمع

if  

عبارات تسمى

if then 

عبارات، أو

if then else 

عبارات. إنها أسماء مختلفة لنفس الشيء.

ذات صلة: 9 أمثلة على حلقات for في نصوص Bash في Linux

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


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

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

ذات صلة: كيفية التحقق من وجود ملف في نصوص Bash في Linux

مثال على جملة If البسيطة

هذا هو الشكل القانوني لأبسط if إفادة:

if ( this-condition-is-true ) 

then

execute-these-statements

fi

إذا تم حل الشرط داخل النص إلى true، فسيتم حذف أسطر النص في then يتم تنفيذ البنود. إذا كنت تبحث في البرامج النصية التي كتبها آخرون، فقد ترى if بيان مكتوب بهذا الشكل:

if ( this-condition-is-true ); then 

execute-these-statements

fi

بعض النقاط التي يجب ملاحظتها:


  • ال if يتم اختتام البيان بالكتابة fi.
  • يجب أن تكون هناك مسافة بعد القوس الأول ( “وقبل القوس الثاني” ) “من الاختبار الشرطي.”
  • إذا كنت ستضع then الكلمة الأساسية على نفس السطر مثل الاختبار الشرطي، تأكد من استخدام الفاصلة المنقوطة ” ; ” بعد الاختبار.

يمكننا إضافة خيار اختياري else شرط لتنفيذ بعض التعليمات البرمجية إذا ثبت أن اختبار الشرط خاطئ. else الجملة لا تحتاج إلى then كلمة رئيسية.

if ( this-condition-is-true ) 

then

execute-these-statements

else

execute-these-statements-instead

fi

يُظهر هذا البرنامج النصي مثالاً بسيطًا لـ if عبارة تستخدم else يفحص الاختبار الشرطي ما إذا كان عمر العميل أكبر من أو يساوي 21 عامًا. إذا كان الأمر كذلك، فيمكن للعميل دخول المبنى، then يتم تنفيذ البند. إذا لم يكونوا كبارًا بما يكفي، else تم تنفيذ البند، ولم يُسمح لهم بالدخول.

#!/bin/bash 

customer_age=25

if ( $customer_age -ge 21 )

then

echo "Come on in."

else

echo "You can't come in."

fi

انسخ النص من الأعلى إلى محرر، واحفظه كملف يسمى “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 إذا كانت الجملة موجودة، فسيتم تنفيذها.

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

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


#!/bin/bash 

echo -n "Enter a number: "

read number

if ( $number -eq 0 )

then

echo "You entered zero. Zero is an even number."

elif ( $(($number % 2)) -eq 0 )

then

echo "You entered $number. It is an even number."

else

echo "You entered $number. It is an odd number."

fi

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

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

./if-even.sh

تشغيل البرنامج النصي if-even.sh مع مدخلات مختلفة

كل هذا يعمل بشكل جيد.

أشكال مختلفة من الاختبار الشرطي

الأقواس ” () “لقد استخدمنا في اختباراتنا الشرطية طريقة مختصرة لاستدعاء test البرنامج. وبسبب ذلك، فإن جميع المقارنات والاختبارات التي test الدعم متاح لك if إفادة.


هذا هو فقط عدد قليل منهم:

  • ! تعبير:صحيح إذا كان التعبير خاطئًا.
  • -n سلسلة:صحيح إذا كان طول السلسلة أكبر من الصفر.
  • سلسلة -z:صحيح إذا كان طول السلسلة يساوي صفرًا. أي أنها سلسلة فارغة.
  • سلسلة 1 = سلسلة 2:صحيح إذا كان string1 هو نفسه string2.
  • سلسلة 1 != سلسلة 2:صحيح إذا لم يكن string1 هو نفسه string2.
  • عدد صحيح 1 -eq عدد صحيح 2: صحيح إذا كان العدد الصحيح 1 يساوي العدد الصحيح 2 عدديًا
  • عدد صحيح 1 -qt عدد صحيح 2: صحيح إذا كان العدد الصحيح 1 أكبر عدديًا من العدد الصحيح 2
  • عدد صحيح 1 -lt عدد صحيح 2: صحيح إذا كان العدد الصحيح 1 أقل عدديًا من العدد الصحيح 2
  • -d الدليل:صحيح إذا كان الدليل موجودًا.
  • ملف -e:صحيح إذا كان الملف موجودًا.
  • ملف -s:صحيح إذا كان الملف موجودًا بحجم أكبر من الصفر.
  • ملف -r:صحيح إذا كان الملف موجودًا وتم تعيين إذن القراءة.
  • ملف -w:صحيح إذا كان الملف موجودًا وتم تعيين إذن الكتابة.
  • -ملف x:صحيح إذا كان الملف موجودًا وتم تعيين إذن التنفيذ.


في الجدول، يمكن أن يتضمن “الملف” و”الدليل” مسارات الدليل، سواء كانت نسبية أو مطلقة.

علامة التساوي “=“واختبار المساواة -eq ليست متماثلة. تقوم علامة التساوي بإجراء مقارنة نصية حرفًا بحرف. يقوم اختبار المساواة بإجراء مقارنة عددية.

يمكننا أن نرى هذا باستخدام test برنامج على سطر الأوامر.

test "this string" = "this string"

test "this string" = "that string"

test 1 = 001

test 1 -eq 001

في كل حالة، نستخدم echo أمر لطباعة رمز الإرجاع للأمر الأخير. صفر يعني صحيح، واحد يعني خطأ.

استخدام برنامج الاختبار على سطر الأوامر لاختبار المقارنات المختلفة


استخدام علامة المساواة ” = “يعطينا استجابة خاطئة عند مقارنة 1 بـ 001. هذا صحيح، لأنهما سلسلتان مختلفتان من الأحرف. رقميًا، هما نفس القيمة—واحد—لذا فإن -eq يعيد المشغل استجابة صحيحة.

إذا كنت تريد استخدام مطابقة الأحرف البدل في الاختبار الشرطي الخاص بك، فاستخدم القوس المزدوج ” (( )) “النحو.”

#!/bin/bash 

if (( $USER == *ve ))

then

  echo "Hello $USER"

else

  echo "$USER does not end in 've'"

fi

يتحقق هذا البرنامج النصي من اسم حساب المستخدم الحالي. إذا كان ينتهي بـ “ve“، يقوم بطباعة اسم المستخدم. إذا لم ينتهي بـ ” ve “، كما يخبرك النص، وينتهي.

./if-wild.sh

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

عبارات If المتداخلة

يمكنك وضع if بيان داخل آخر if إفادة.


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

هذا نص برمجي يبين اليوم كرقم من واحد إلى سبعة. الرقم واحد هو يوم الاثنين، والرقم سبعة هو يوم الأحد.

يخبرنا بساعات عمل المتجر. إذا كان يوم عمل أو يوم سبت، فإنه يخبرنا أن المتجر مفتوح. إذا كان يوم الأحد، فإنه يخبرنا أن المتجر مغلق.

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

#!/bin/bash 

# get the day as a number 1..7

day=$(date +"%u")

if ( $day -le 6 )

then

## the shop is open

if ( $day -eq 3 )

then

# Wednesday is half-day

echo "On Wednesdays we open in the morning only."

else

# regular week days and Saturday

echo "We're open all day."

fi

else

# not open on Sundays

echo "It's Sunday, we're closed."

fi

انسخ هذا البرنامج النصي إلى محرر، واحفظه كملف يسمى “if-shop.sh”، واجعله قابلاً للتنفيذ باستخدام chmod يأمر.

لقد قمنا بتشغيل البرنامج النصي مرة واحدة ثم قمنا بتغيير ساعة الكمبيوتر لتصبح يوم الأربعاء، ثم قمنا بتشغيل البرنامج النصي مرة أخرى. ثم قمنا بتغيير اليوم إلى يوم الأحد وقمنا بتشغيله مرة أخرى.

./if-shop.sh

./if-shop.sh

./if-shop.sh

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

ذات صلة: كيفية استخدام اختبارات الشرط ذات الأقواس المزدوجة في Linux

الحالة إذا

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


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

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

أضف تعليق