مضى على الشبكة و يوم من العطاء.

If Statements الدرس الخامس

  • بادئ الموضوع بادئ الموضوع speed
  • تاريخ البدء تاريخ البدء

speed

./عضو جديد

السمعة:

في هذا القسم من برنامج Bash Scripting التعليمي ، ستتعرف على الطرق التي يمكنك من خلالها استخدام عبارات if في نصوص Bash النصية للمساعدة في أتمتة المهام
Basic If Statements
تقول عبارة if الأساسية بهذا السياق ، إذا كان اختبار معين صحيحًا ، فقم بتنفيذ مجموعة معينة من الإجراءات. إذا لم يكن ذلك صحيحًا ، فلا تقم بهذه الإجراءات. إذا كان يتبع التنسيق في الاسفل
كود:
if [ <   > ]
then
<commands>
fi
لنأخذمثال بسيط
كود:
#!/bin/bash
# Basic if statement
if [ $1 -gt 100 ]
then
echo Hey that\'s a large number.
pwd
fi
date
هذا هو سكريبت Bash البسيط الذي يحتوي على عبارة if. سأقوم بشرح الأوامر الواردة في السكريبت:

1. if [ $1 -gt 100 ]: هذا يفحص ما إذا كان الوسيط الذي يتم تمريره إلى السكريبت (باستخدام $1) أكبر من 100. إشارة [ تستخدم للفحص التشغيلي في Bash.
2. then: هذا يوضح أنه إذا كان الشرط في الخط السابق صحيحًا (أي $1 أكبر من 100)، سيتم تنفيذ الأوامر التالية.
3. echo Hey that's a large number.: هذا يطبع نص “Hey that’s a large number.” إلى الإخراج القياسي (الشاشة).
4. pwd: هذا هو أمر Bash يعيد مسار الدليل الحالي (مسار العمل الحالي) ويطبعه إلى الإخراج القياسي.
5. fi: هذا يختتم الجزء الحقيقي للبيان if. يشير إلى نهاية الجزء المطابق لـ if ويتم تنفيذه إذا كان الشرط غير صحيح.
6. date: هذا هو أمر Bash يعيد التاريخ والوقت الحالي ويطبعه إلى الإخراج القياسي.

لذا، إذا تم تشغيل السكريبت وتم تمرير وسيط أكبر من 100، فسيتم طباعة النص “Hey that’s a large number.” ومسار الدليل الحالي، ثم التاريخ والوقت الحالي


دعنا نجرب ونري هيا بنا

image


image


لنأخذ مثال الان

image


الان دعنا نشرح هذا الكلام

┌──(sh3ll㉿speed)-[~/bash]
└─$ test 01 = 1


في هذا السطر، يتم استخدام الأمر test للقيام بمقارنة بسيطة بين السلاسل “01” و “1”. يجري التحقق مما إذا كانت السلاسل متساوية. يُعتبر هذا السطر غير صحيح،

┌──(sh3ll㉿speed)-[~/bash]
└─$ echo $?
1

في هذا السطر، يتم استخدام الأمر echo لطباعة قيمة الخروج (exit code) التي تمت إعادتها من الأمر السابق test 01 = 1. يتم طباعة الرقم 1، وهو ما يشير إلى أن المقارنة غير صحيحة

┌──(sh3ll㉿speed)-[~/bash]
└─$ test 01 -eq 1


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

┌──(sh3ll㉿speed)-[~/bash]
└─$ echo $?
0

في هذا السطر، يتم استخدام الأمر echo مرة أخرى لطباعة قيمة الخروج التي تمت إعادتها من الأمر السابق `test 01 -eq 1 يتم طباعة الرقم 0، وهو ما يشير إلى أن المقارنة صحيحة.

┌──(sh3ll㉿speed)-[~/bash]
[COLOR=#]└─$ test -s myfile[/COLOR]

في هذا السطر، يتم استخدام الأمر test للتحقق مما إذا كان حجم الملف “myfile” أكبر من صفر (أي غير فارغ). يُعتبر هذا السطر غير صحيح، وبالتالي.

┌──(sh3ll㉿speed)-[~/bash]
└─$ echo $?

1

في هذا السطر، يتم استخدام الأمر echo لطباعة قيمة الخروج التي تمت إعادتها من الأمر السابق test -s myfile. يتم طباعة الرقم 1، وهو ما يشير إلى أن الملف فارغ. .

┌──(sh3ll㉿speed)-[~/bash]
[COLOR=#]└─$ ls /etc/ > myfile[/COLOR]

في هذا السطر، يتم استخدام الأمر ls لعرض محتويات الدليل “/etc/” وتوجيه الناتج إلى الملف “myfile”.

┌──(sh3ll㉿speed)-[~/bash]
[COLOR=#]└─$ test -s myfile[/COLOR]

في هذا السطر، يتم استخدام الأمر test للتحقق مما إذا كان حجم الملف “myfile” أكبر من صفر (أي غير فارغ). يُعتبر هذا السطر صحيحًا .

┌──(sh3ll㉿speed)-[~/bash]
└─$ echo $?
0

في هذا السطر، يتم استخدام الأمر echo مرة أخرى لطباعة قيمة الخروج التي تمت إعادتها من الأمر السابق test -s myfile. يتم طباعة الرقم 0، وهو ما يشير إلى أن الملف غير فارغ…
Nested If statements
قد يكون لديك العديد من عبارات if حسب الضرورة داخل البرنامج النصي الخاص بك. من الممكن أيضًا أن يكون لديك تعليمة if داخل تعليمة if أخرى. على سبيل المثال ، قد نرغب في تحليل رقم معطى في سطر الأوامر كما يلي:
كود:
#!/bin/bash
# Nested if statements
if [ $1 -gt 100 ]
then
    echo "Hey that's a large number."
    if (( $1 % 2 == 0 ))
    then
        echo "And is also an even number."
    fi
fi
  • #!/bin/bash: تعيين مسار لغة الباش لتنفيذ السكريبت.
  • # Nested if statements: تعليق يوضح عنوان أو وصف للشفرة.
  • if [ $1 -gt 100 ]: تبدأ التعليمة الشرطية باستخدام [ ] لفحص ما إذا كان الوسيط الأول الممرر إلى السكريبت $1 أكبر من 100.
  • then: يتم تحديد بداية الجزء الذي يتم تنفيذه إذا كان الشرط صحيحًا.
  • echo "Hey that's a large number.": يتم طباعة رسالة إلى الناتج القياسي تعلن أن الرقم كبير.
  • if (( $1 % 2 == 0 )): تبدأ التعليمة الشرطية الداخلية باستخدام (( )) لفحص ما إذا كان الوسيط الأول $1 قسمة على 2 يترك باقيًا صفر.
  • then: يتم تحديد بداية الجزء الذي يتم تنفيذه إذا كان الشرط صحيحًا.
  • echo "And is also an even number.": يتم طباعة رسالة إلى الناتج القياسي تعلن أن الرقم أيضًا عدد زوجي.
  • fi: ينهي الجزء الداخلي للتعليمة الشرطية الداخلية.
  • fi: ينهي الجزء الخارجي للتعليمة الشرطية.
image
كود:
#!/bin/bash

if [ $# -eq 1 ]
then
nl $1
else
nl /dev/stdin
fi
في بعض الأحيان قد يكون لدينا سلسلة من الشروط التي قد تؤدي إلى مسارات مختلفة
image
على سبيل المثال ، قد يكون الأمر كذلك إذا كان عمرك 18 عامًا أو أكثر ، يمكنك الذهاب إلى الحفلة. إذا لم تكن كذلك ولكن لديك رسالة من والديك ، فيمكنك الذهاب ولكن يجب عليك العودة قبل منتصف الليل. وإلا لا يمكنك الذهاب.
كود:
#!/bin/bash
# elif statements
if [ $1 -ge 18 ]
then
echo You may go to the party.
elif [ $2 == 'yes' ]
then
echo You may go to the party but be back before midnight.
else
echo You may not go to the party.
fi
العمليات المنطقية
في أحيان أخرى نرغب في تنفيذ الإجراء إذا تم استيفاء شرط من عدة شروط. يمكننا استيعاب هذه العوامل المنطقية
  • and - &&
  • or - ||
لى سبيل المثال ، ربما نرغب فقط في إجراء عملية إذا كان الملف قابلاً للقراءة وكان حجمه أكبر من الصفر
كود:
#!/bin/bash
# and example
if [ -r $1 ] && [ -s $1 ]
then
echo This file is useful.
fi
speed or storm ربما نرغب في أداء شيء مختلف قليلاً إذا كان المستخدم
كود:
#!/bin/bash
# or example
if [ $USER == speed' ] || [ $USER == 'storm' ]
then
ls -alh
else
ls
fi
Case Statements
image

لنأخذمثال
كود:
#!/bin/bash
# case example
case $1 in
start)
echo starting
;;
stop)
echo stoping
;;
restart)
echo restarting
;;
*)
echo don\'t know
;;
esac
  • case $1 in: هنا يتم فحص القيمة الممررة إلى البرنامج في متغير $1.
  • start): إذا كانت القيمة الممررة تساوي “start”، سيتم تنفيذ الأوامر التالية.
  • echo starting: سيتم طباعة “starting” على الناتج القياسي (الشاشة) للإشارة إلى بدء التشغيل.
  • ;;: يستخدم لإنهاء هذه الحالة والانتقال إلى حالة جديدة إذا وجدت.
  • stop): إذا كانت القيمة الممررة تساوي “stop”، سيتم تنفيذ الأوامر التالية.
  • echo stopping: سيتم طباعة “stopping” على الناتج القياسي (الشاشة) للإشارة إلى إيقاف التشغيل.
  • ;;: يستخدم لإنهاء هذه الحالة والانتقال إلى حالة جديدة إذا وجدت.
  • restart): إذا كانت القيمة الممررة تساوي “restart”، سيتم تنفيذ الأوامر التالية.
  • echo restarting: سيتم طباعة “restarting” على الناتج القياسي (الشاشة) للإشارة إلى إعادة التشغيل.
  • ;;: يستخدم لإنهاء هذه الحالة والانتقال إلى حالة جديدة إذا وجدت.
  • *): إذا كانت القيمة الممررة ليست مطابقة لأي من الحالات السابقة.
  • echo don\'t know: سيتم طباعة “don’t know” على الناتج القياسي (الشاشة) للإشارة إلى أن الحالة غير معروفة.
  • ;;: يستخدم لإنهاء هذه الحالة الافتراضية.
  • esac: يستخدم لإنهاء البنية الشرطية (case) وإشارة نهاية الحالات.
image
لنأخذ مثال اكثر تعقيدا
كود:
#!/bin/bash
# Print a message about disk useage.
space_free=$( df -h | awk '{ print $5 }' | sort -n | tail -n 1 | sed 's/%//' )
case $space_free in
[1-5]*)
echo Plenty of disk space available
;;
[6-7]*)
echo There could be a problem in the near future
;;
8*)
echo Maybe we should look at clearing out old files
;;
9*)
echo We could have a serious problem on our hands soon
;;
*)
echo Something is not quite right here
;;
esac
image
image
 
التعديل الأخير:

آخر المشاركات

عودة
أعلى