اذهب إلى المحتوى
  • 0

شرح كود bash

Sami Remili

السؤال

Recommended Posts

  • 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.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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 ماهي فائدة استعماله ارجو اجابة و شرح 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...