فهم التعبيرات الشرطية في باش

كتابة نص بورن آجين شل (Bash) يمكن أن تكون تجربة مجزية، خاصة عندما تضيف البرمجة اللوجيستية إليها، مضمونًا جاهزيتها. وسيلة لتضمين هذه البرمجة، وجعل نصك أكثر ذكاءً، هو من خلال استخدام التصريحات الشرطية، تحديداً “باش إذا وإلا”.

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

متحمس؟ اغمر في العمق، وطوِّر مهارات برمجة باش الخاصة بك!

إعداد المنصة: المتطلبات الأولية

للاستفادة القصوى من هذا البرنامج التعليمي، يجب أن تكون بعض الأمور الأساسية متاحة:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

لماذا يجب عليك الاستفادة من تصريحات باش إذا وإلا؟

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

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

تطوير النصوص بمناهج ‘bash if else’ ليس فقط يزيد من مرونتها ولكن يعزز من فاعليتها أيضًا. تخيل نصًا مصممًا لتطهير جميع الملفات في مجلد. باستخدام ‘bash if else’، يمكنك حذف تلك الملفات ذات العمر الأكبر من 30 يومًا جراحيًا، مع الحفاظ على الباقي.

التعمق في بيان ‘bash if else’

الآن، دعنا نترك التمهيد ونبدأ في العمل الفعلي. سنبدأ بواحدة من أشهر البيانات الشرطية المعتمدة عالميًا: بيان ‘bash if else’.

في جوهره، ‘bash if else’ هو بوابة لإدراج شروط في نصوص باش الخاصة بك. انظر إلى بناء الجملة البسيط أدناه:

  • يبدأ بالكلمة الرئيسية if، تليها الشروط المغلفة داخل [[ ]]. بعد ذلك، يتم تنفيذ الكود الموجود داخل بيان ‘bash if else’، ويختتم الأمر بالكلمة الرئيسية fi.
  • تفصل كلمة then الشرط عن الإجراءات (أو البيانات) التي يتم تنفيذها عندما تُرضى الشروط. يمكن أن يمتد كتلة الإجراءات هذه عبر عدة أسطر، مفصولة بفاصلات منقوطة (;).
if [[ condition ]]; then
	statement
fi

تخيل كتابة نظام تسجيل الدخول. يطلب اسم المستخدم الصحيح قبل منح الوصول:

1. قم بتشغيل وحدة التحكم الخاصة بك وابدأ ملف bash_if_demo.sh باستخدام محرر النصوص المفضل لديك. سيكون هذا ساحتنا لفهم بيانات ‘bash if else’.

nano bash_if_demo.sh

2. قم بتضمين مثال “bash if else” المقدم أدناه في ملف “bash_if_demo.sh” الخاص بك. بمجرد الإدراج، قم بحفظ التعديلات وإغلاق المحرر.

يقوم البرنامج النصي “bash if else” بطلب اسم المستخدم. إذا تم إدخال اسم المستخدم المتوقع، فإن رسالة ترحيب تظهر، مع إضافة تاريخ ووقت الحالي.

الحفاظ على سجل لتاريخ ووقت محاولات دخول المستخدم يمكن أن يكون قيمًا للتحليلات المستقبلية.

السطر الافتتاحي #!/bin/bash (المعروف أيضًا باسم shebang) يوجه النظام بشأن المترجم المستخدم لمعالجة الشفرة التالية في البرنامج النصي. هنا، “bash” هو المترجم الذي اخترناه.

#!/bin/bash
# يقوم بطباعة سؤال على الشاشة.
echo "Whats your name?"
# يلتقط إدخال لوحة المفاتيح ويخزنه في المتغير $NAME
read NAME
# يبدأ تعليمة "bash if else" - يفحص ما إذا كانت القيمة في $NAME 
# تتطابق مع "ATA". إذا كان هناك تطابق، يتم تنفيذ الشفرة المحيطة. إلا، يتم تجاهلها.
if [ $NAME == "ATA" ]
then
  # يعرض رسالة فقط إذا كانت القيمة في $NAME تساوي "ATA".
  echo "Welcome back ATA!"
fi
# خارج "bash if else"، يتم عرض التاريخ والوقت الحالي دائمًا.
date

3. الآن، دعونا نضع نصنا ‘bash if else’ على الاختبار. قم بتنفيذ الأمر أدناه:

bash bash_if_demo.sh

تذكر، بغض النظر عن النسخة من قذيفة باش التي تستخدمها، قم بإضافة اسم النص الخاص بك مسبوقًا بـ ‘bash’. هذا يضمن أن النظام يستخدم باش لتنفيذ النص.

أدخل “ATA” واضغط على Enter. يجب أن يكون الناتج مشابهًا لما يلي:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

إذا قمت بإدخال أي شيء آخر بخلاف “ATA”، فلن يظهر رسالة الترحيب في الناتج. سيتم عرض الوقت والتاريخ الحالي فقط. يعود هذا السلوك إلى البيان ‘bash if else’ الذي يتحقق من مطابقة دقيقة مع قيمة في المتغير $NAME.

يرجى ملاحظة أن بيانات ‘bash if else’ حساسة لحالة الأحرف. لذلك، “ata”، “aTa”، “Ata”، وهكذا، يعتبرون مختلفين عن “ATA”.

Outcome on Entering a Non-matching Value

قم بتجربة نصوصك المتتابعة ‘bash if else’ باستخدام مدخلات متنوعة باستمرار. هذا يضمن أن النصوص تعمل كما هو متوقع.

التنقيب في العمق: بيانات ‘bash if else’ متداخلة

لقد فهمت بالفعل أساسيات صياغة بيانات ‘bash if else’. في حين أن هذه المعرفة الأساسية تكفي للمهام البسيطة، فإن النصوص المعقدة غالبًا ما تتطلب بناءات متقدمة. هنا تأتي بيانات ‘bash if else’ المتداخلة إلى اللعب. أساساً، إنه بيان ‘if’ يحتوي على بيان ‘if’ أو أكثر إضافيًا.

الهيكل أدناه يوضح الصيغة الأساسية لبيانات ‘bash if else’ المتداخلة. هنا، تحتوي عبارة if [[ شروط ]] الخارجية على الرمز القابل للتنفيذ فقط عند تحقيق الشرط. في سياقنا، الرمز المتداخل هو بيان ‘if’ آخر.

  • إذا [[ الشروط ]] – يُمثل هذا البيان الخارجي ‘bash if else’. يتم تنفيذ الشيفرة المدمجة (بيان ‘if’ آخر) فقط إذا كانت الشروط المحددة صحيحة.
  • إذا [[ الشرط2 ]] – يُمثل هذا الجزء الداخلي ‘bash if else’. يحتوي على الشيفرة التي يتم تنفيذها إذا وفقًا للشروط يتم الوفاء بها.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

لنتناول أمورًا أعمق. سنقوم الآن بتحسين مثالنا السابق على ‘bash if else’، سنضيف الآن بيان ‘if’ يستفسر عن كلمة مرور:

1. أولاً، قم بإنشاء ملف جديد بعنوان bash_nested_if_demo.sh باستخدام محرر النص المفضل لديك.

nano bash_nested_if_demo.sh

2. قم بنقل شيفرة ‘bash if else’ المقدمة أدناه إلى ملف bash_nested_if_demo.sh، احفظ التغييرات الخاصة بك، وأغلق المحرر.

يُطلب من شيفرة ‘bash if else’ هذه إدخال اسم وكلمة مرور. إذا تم تحقيق الشروط للاسم والكلمة المرور، يتم عرض رسالة معينة. إذا لم يكن هناك تطابق، يتم عرض الإخراج بتاريخ ووقت الحالي.

#!/bin/bash
# يقدم رسالة تطالب بإدخال اسم المستخدم.
echo "Whats your name?"
# يقوم بجمع إدخال المستخدم.
read NAME
# يبدأ في التحقق مما إذا كان $NAME يتطابق مع "ATA".
if [ $NAME == "ATA" ]
 then
 # يطرح سؤالاً تالياً، هذه المرة بخصوص كلمة المرور.
 echo "Password?"
 # يلتقط إدخال كلمة المرور.
 read Password
   # "التعبئة الشرطية للـ bash if else" - يتحقق مما إذا كانت $Password تتوافق مع "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # يعرض رسالة إذا تم تحقيق كل من الشروط المتعلقة بالاسم وكلمة المرور.
     echo "You've successfully logged in as ATA."
   fi
fi
# يسلط الضوء على التاريخ والوقت الحاليين.
date

3. الآن، دعنا نرى هذا النص “bash if else” في العمل. قم بتشغيل الأمر أدناه:

bash bash_nested_if_demo.sh

للحصول على نتائج مثالية، أدخل ATA كاسم مستخدم و pwd123 ككلمة مرور.

Demonstrating the bash_nested_if_demo.sh Script in action

إذا اختلفت مدخلاتك عن “ATA” أو “pwd123″، ستتلقى فقط ردود فعل تتعلق بالتاريخ والوقت الحاليين. هذا لأن بنية ‘bash if else’ تتطلب تحقيق كل من الشروط.

Validating if entered conditions are met using ‘bash if else’

فك تشفير بيانات “Bash If Else”

تعتبر عبارات “bash if else” ركائز في البرمجة بلغة Bash، حيث توفر قدرات حاسمة لنصوصك. ومع ذلك، من الأساسي فهم أن استخدام تعليمات “if” ليس بدون عيوب.

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

إذاً، كيف يمكنك تبسيط شيفرتك في “bash if else” لتظل مفهومة؟ اختر البيانات “if else” بدلاً من الكثير من الشروط المتداخلة. الكلمة “else” توفر سهولة تحديد مجموعة بيانات تُنفذ إذا لم يتم تحقيق شرط “if”.

لفهم أكثر، اعتبر بناء عبارة “Bash If Else” التالية، حيث:

  • if [[ conditions ]] – هنا، تتضمن بيانات “bash if else” الشيفرة (بيان1) التي تنشط فقط عندما يكون الشرط المحدد صحيحًا.
  • else – هذا جزء من هيكل “bash if else”. بيان else يشمل الشيفرة (بيان2) التي تُنفذ عندما لا يتم تحقيق الشرط في البند if السابق.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

تخيل إنشاء لعبة بسيطة في “bash if else” حيث يتوقع النظام رقمًا عشوائيًا من المستخدم:

1. ابدأ بإنشاء ملف جديد بالاسم bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. دمج الشيفرة التالية لـ “bash if else” في ملف bash_if_else_demo.sh الخاص بك، احفظ التعديلات، ثم اخرج.

الشيفرة الأساسية لـ “bash if else” تطلب من المستخدم إدخال رقمهم الحظ. إذا كان الرقم زوجيًا، يعرض رسالة “لقد فزت!”، وعلى العكس، يؤدي رقم فردي إلى إخراج “لقد خسرت!”.

#!/bin/bash
# يذاع طلب للحصول على الرقم الحظ للمستخدم
# يذاع طلب للحصول على الرقم الحظ للمستخدم
echo -n "Input Your Lucky Number:"
# يقبل الرقم الذي تم إدخاله.
read var
# 'bash if else' شرط للتحقق مما إذا كانت القيمة هي زوجية أم لا.
if [ $((var%2)) == 0 ]; then
 # يعلن الفوز إذا تم تحقيق الشرط
 echo "You Won with 'bash if else'!"
else
 # يعلن الخسارة إذا لم يتم تحقيق الشرط
 echo "You Lost using 'bash if else'!"
fi

3. لرؤية نص الأمر ‘bash if else’ في العمل، قم بتشغيل الأمر التالي:

bash bash_if_else_demo.sh

عند إدخال رقم زوجي، يجب أن ترى رسالة “لقد ربحت بـ ‘bash if else’!” على الشاشة. بالعكس، يجب أن يؤدي إدخال رقم فردي إلى رسالة “لقد خسرت باستخدام ‘bash if else’!”

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

لتحسين نص ‘bash if else’، افكر في دمج قسم يحدد ما إذا كان المستخدم يدخل حرفًا أو حرفًا مميزًا بدلاً من رقم.

فك شيفرة ‘Bash If Else’ وبيانات الحالة

حتى الآن، لقد استكشفت طريقتين لاتخاذ قرارات في سكربتاتك باستخدام Bash، وهي بيانات ‘bash if else’. ولكن Bash يقدم طريقة أخرى لاتخاذ القرار – بيانات case.

مماثلة لـ ‘bash if else’، تعتبر بيانات case عبارة عن تسلسلات تعليمات متقدمة يتم تنفيذها استنادًا إلى شروط محددة. الميزة الملحوظة مع بيانات الحالة هي وضوحها وإيجازها، خاصة عند مقارنتها بسيناريوهات ‘bash if else’ المتداخلة.

لفهم البديل ‘bash if else’ بشكل كامل، دعونا نتناول بناء الجملة:

  • case $VAR in – يقوم هذا الجزء من البناء بتقييم المتغير $VAR مقابل أنماط محددة حتى يظهر تطابق.
  • pattern1) و pattern2) – هذه هي المعايير التي يتم اختبارها، وبمجرد اكتشاف تطابق، يتم تنفيذ الشيفرة المقابلة (statement1 أو statement2).
  • esac – يختتم هذا البناء الحالة.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

تخيل أنك تقوم بتصميم نص ‘bash if else’ حيث يقوم المستخدمون بإدخال أسماء بلدانهم، وفي الرد، يعرض النص اللغة الرئيسية في تلك البلدان.

1. ابدأ بإنشاء ملف باسم bash_case_demo.sh.

nano bash_case_demo.sh

2. دمج شيفرة ‘bash if else’ المقدمة أدناه في ملف bash_case_demo.sh الخاص بك، ثم احفظ واخرج.

سيقوم النص ‘bash if else’ الناتج بطلب من المستخدم إدخال اسم بلدهم و، بناءً على أنماط ‘case’، سيقوم بطباعة اللغة الرئيسية المتحدثة في البلد المذكور.

3#!/bin/bash
# يستطلع المستخدم بسؤال حول بلد إقامته
echo -n "In which country do you reside?"
# يلتقط استجابة المستخدم.
read var
# يكشف عن اللغة القياسية في البلد المحدد من قبل المستخدم ($var),
# باعتماد الأنماط ضمن إطار 'case'.
echo -n "The official language of $var is "

# تقوم البيانات 'bash if else' بتقييم ما إذا كانت إدخالات المستخدم ($var) متطابقة مع الأنماط.
case $var in
# ينشئ أنماط تكشف عن اللغة الأساسية للبلد المختار من قبل المستخدم.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. لتجربة هذا النص ‘bash if else’ مباشرة، استخدم الأمر التالي:

bash bash_case_demo.sh

ستلاحظ أن النص يبرز بدقة اللغة وفقًا لبلد المستخدم المختار.

إذا لم يتطابق البلد المقدم مع الأنماط المحددة، يتم تنشيط النمط الافتراضي (*)، مما يؤدي إلى الناتج “غير معروف”.

Illustrating the functionality of the bash_case_demo.sh Script

ختامًا لبيانات التوجيه الشرطية في باش

في هذا الدليل، ستشرع في رحلة فهم ‘bash if else’ وبيانات التوجيه الشرطية الأخرى في باش. من البيانات البسيطة ‘if’ إلى البيانات المعقدة ‘if-else’ و ‘case’، أنت الآن مجهز بأدوات أساسية لكتابة سيناريوهات باش فعالة.

بهذه الأسس الأساسية لـ ‘bash if else’ في متناول يديك، يمكنك بناء سيناريوهات باش بشكل أكثر كفاءة، مما يقلل من الأخطاء.

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

Source:
https://adamtheautomator.com/bash-if-else/