سلام عليكم 

 

هل احد يشرح لي الكود قطعة قطعة بارك الله فيكم و هو كالاتي :

 

#!/bin/bash

n=0

command=$1
while ! $command && [ $n -le 5 ]; do
  sleep $n
  ((n=n+1))
  echo "Retry #$n"
done;
 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

تحياتي

السطر الأول:

#!/bin/bash

تعرف العلامة #! باسم ال'shabang' وتستخدم في أنظمة التشغيل linux لتحديد البرنامج الذي سيقوم بتشغيل الscript، ويتم تمرير الscript كمدخلات إلى هذا البرنامج.
في هذه الحالة عند تشغيل الملف الذي لدينا، سيقوم نظام التشغيل بإستخدام /bin/bash وإعطاء الكود الموجود في الscript كinput لهذا البرنامج.
ومثلاً إذا كان الshabang متبوعاً ب/bin/python سيقوم نظام التشغيل بتشغيل الscript داخل بايثون.

n=0

تم تعريف متغير n ومساوته بالصفر.

command=$1

يعرف $1 باسم الpositional parameters وهو ما تم تمريره إلى السكريبت، وهو مشابه لsys.argv في بايثون.
على سبيل المثال إذا كان لديك script بهذا الشكل واسمها script.sh:

command=$1
command2=$2
echo $command
echo $command2

وقمت بإستدعاءها كالآتي:

script.sh arg1 arg2

سيتم طباعة arg1 arg2 وهو ما تم تمريرهم إلى الscript.

بالتالي في الكود الخاص بك قمنا بوضع أول قيمة تم تمريرها عند إستدعاء الscript في المتغير command.
 

while ! $command && [ $n -le 5 ]; do

يتم عمل loop تقوم بالإستمرار في حالتين، لفهم الحالتين يجب توضيح الآتي:

! $command

عند كتابة ! متبوعاً بأمر، يتم تنفيذ آخر أمر تم تنفيذه من الhistory. مثلا:

!ls

سيقوم بتنفيذ آخر أمر ls موجود بالhistory.

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

[ $n -le 5 ]

هنا le تعني less than or equal، أي أن الشرط هنا أن تكون n أقل من أو تساوي 5.
 

  sleep $n
  ((n=n+1))
  echo "Retry #$n"
done;

الأمر sleep يقوم بعمل إنتظار لعدد معين من الثواني.
إذا الكود ككل يقوم بعمل الآتي:
يتم تمرير أمر ما إلى الscript، ويتم تخزين هذا الأمر في متغير يدعى command، ويتم تعريف متغير n ومساوته بالصفر.
ثم يتم عمل loop يتم الخروج منها إذا تم تنفيذ الأمر بنجاح، ويتم الإستمرار فيها بينما الأمر به خطأ وn أقل من أول تساوي 5. وفي اللوب يتم التأخير بعدد n من الثواني ، ثم زيادة n، وطباعة الجملة Retry.

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ 9 ساعات قال مصطفى القباني:

تحياتي

السطر الأول:


#!/bin/bash

تعرف العلامة #! باسم ال'shabang' وتستخدم في أنظمة التشغيل linux لتحديد البرنامج الذي سيقوم بتشغيل الscript، ويتم تمرير الscript كمدخلات إلى هذا البرنامج.
في هذه الحالة عند تشغيل الملف الذي لدينا، سيقوم نظام التشغيل بإستخدام /bin/bash وإعطاء الكود الموجود في الscript كinput لهذا البرنامج.
ومثلاً إذا كان الshabang متبوعاً ب/bin/python سيقوم نظام التشغيل بتشغيل الscript داخل بايثون.


n=0

تم تعريف متغير n ومساوته بالصفر.


command=$1

يعرف $1 باسم الpositional parameters وهو ما تم تمريره إلى السكريبت، وهو مشابه لsys.argv في بايثون.
على سبيل المثال إذا كان لديك script بهذا الشكل واسمها script.sh:


command=$1
command2=$2
echo $command
echo $command2

وقمت بإستدعاءها كالآتي:


script.sh arg1 arg2

سيتم طباعة arg1 arg2 وهو ما تم تمريرهم إلى الscript.

بالتالي في الكود الخاص بك قمنا بوضع أول قيمة تم تمريرها عند إستدعاء الscript في المتغير command.
 


while ! $command && [ $n -le 5 ]; do

يتم عمل loop تقوم بالإستمرار في حالتين، لفهم الحالتين يجب توضيح الآتي:


! $command

عند كتابة ! متبوعاً بأمر، يتم تنفيذ آخر أمر تم تنفيذه من الhistory. مثلا:


!ls

سيقوم بتنفيذ آخر أمر ls موجود بالhistory.

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


[ $n -le 5 ]

هنا le تعني less than or equal، أي أن الشرط هنا أن تكون n أقل من أو تساوي 5.
 


  sleep $n
  ((n=n+1))
  echo "Retry #$n"
done;

الأمر sleep يقوم بعمل إنتظار لعدد معين من الثواني.
إذا الكود ككل يقوم بعمل الآتي:
يتم تمرير أمر ما إلى الscript، ويتم تخزين هذا الأمر في متغير يدعى command، ويتم تعريف متغير n ومساوته بالصفر.
ثم يتم عمل loop يتم الخروج منها إذا تم تنفيذ الأمر بنجاح، ويتم الإستمرار فيها بينما الأمر به خطأ وn أقل من أول تساوي 5. وفي اللوب يتم التأخير بعدد n من الثواني ، ثم زيادة n، وطباعة الجملة Retry.

شكرا أحي على الشرح لكن مازال لبس في ما يخص sys.argv او  command=$1 ماهي فائدة استعماله ارجو اجابة و شرح 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ 9 ساعات قال Sami Remili:

شكرا أحي على الشرح لكن مازال لبس في ما يخص sys.argv او  command=$1 ماهي فائدة استعماله ارجو اجابة و شرح 

بالنسبة ل sys.argv يمكنك فهم ما تقوم بعمله من خلال الجزء الأول من هذا الرد.

و $1 هنا هو نفس الإستخدام بالنسبة للbash script. هذه هي طريقة الوصول إلى ما تم تمريره من مدخلات عند إستدعاء الscript.

فمثلاً إذا أردت عمل script تقوم بتعديل اسم ملف، وتريد أن تستخدمها بأن تستدعيها وتمرر لها اسم الملف القديم واسم الملف الجديد، أي أنك تريد إستدعائها كالآتي:

rename.sh old_name new_name

هنا تم تمرير old_name وnew_name للسكريبت، وعند كتابة الكود للوصول إليهم يمكن الوصول إليهم كالآتي:

x = $1
y = $2

وسيكون قيمة x مساوية لأول مدخل معطى للسكريبت أي سيكون "old_name" وستكون قيمة y مساوية للمعطى الثاني وهو new_name.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن