أساسيات برمجة الـ ShellScript
صفحة 1 من اصل 1
أساسيات برمجة الـ ShellScript
بسم الله الرحمن الرحيم
كما قلت في الدرس السابق أن هذا الدرس سيكون المدخل إلى
عالم البرمجة بالـ ShellScript و إن شاء الله سيستمر هذا الدرس حتى
الإحتراف بإذن لله...
الكثير يخطلط به الأمر بين bash و sh و الـ Terminal و الـ ShellScript
يُعتبر bash و sh هم المسؤلين عن الترجمه لملفات السكربت أو الأوامر
و الـ Terminal هي النافذه التي نتعامل من خلالها مع سطر الأوامر
أما الـ ShellScript فهي لغةالبرمجة بالـ Shell
هذا
الدرس مقسم إلى عدة أجزاء حتى يسهل إستيعابه و الأمثله الموجوده يستحسن
دائماً أن تكتبها بيدك حتى تكون عادة قراءة و كتابة الكود موجوده عندك بعد
الإنتهاء من سلسلة هذه الدروس , أي لا تعتمد على النسخ و اللصق ( Copy
& Paste )
نبدأ الدرس....
الجزء الأول
إنشاء ملفات ShellScriptيمكنك إنشاء ملف ShellScript عن طريق أي ملف نصي عادي و بعد ذالك نُغير أسم الملف و نُضيف إلى أخر الملف sh. الذي يسمى Extantionفي المثال التالي قمنى بكتابة ShellScript صغير في ملف أسمة hello.sh وظيفتة هي طباعة رسالة ترحيب على الشاشة
كود:
# hello.sh
# This is my first shell script
printf “Hello! Bash is wonderfu.”
exit 0
نلاحظ أن أول سطر بدأ بعلامة # وهذه العلامة تختص بالتعليقات فقط أي أنه يمكنك كتابة أي شيئ بعد هذه العلامة و سيتم تجاهل الـBash لها , و ينتهي التعليق بنهاية السطر .تكتب التعليقات لتكون غنية بالمعلومات اللازمة عن وظائف هذه الأوامر وليس وظائف أمر أمر , ولكي يسهل عملية الكشف عن الأخطاء فيما بعد وهذا لإحتواء وصف سريع عن وظائف ملف ShellScript معين فبالتالي يمكن إلغائه أو تعديله بسهوله أفضل من إختبار ملف ملف وخاصة في المشاريع التي تعتمد على عدد كبير من ملفات الـShellScriptالأمر exit و متبوع بالصفر 0 , معنها أنه يخبر الـ Bash أن الأوامر قد إنتهت بنجاحيمكنك الأن تنفيذ السكربت و مشاهدة النتائج
$bash hello.sh
إذا لم يكن هناك أي أخطأ , سيظهر لك الرساله التاليه
Hello! Bash is wonderful.
إنشاء ShellScript بطريقة أحترافيهنفترض أنك تريد الأن تنفيذ الأمر sync عندما تكون متأكد أنه لا يوجد أحد على النظام .لتنفيذ هذا الأمر تابع هذا السكربت
كود:
USERS=`who | wc -l`
if [ $USERS -eq 0 ] ; then
sync
fiهذا العمل سليم وثابت على الـBash , ولاكن راعي هذه الأسئله التاليه :
كيف سيعرف لينكس أن هذا Bash Script إذا كان هناك عدد 0 من المستخدمين , فمن الذي سينفذ هذه الأوامر ؟ كيف سأعرف أن هذا السكربت ككل قد نجح النظام في تنفيذها أم لا ؟ ماذا سيحدث إذا تم مسح الأمر sync عن طريق الخطأ قبل تنفيذ هذا السكربت , أو إذا كان مدير النظام قد قام بتغير الصلاحيات في تنفيذ هذه الأمر ؟لغة الـ ShellScript لغه مرنة جداً , فقط تحتاج أن تعمل عليها بشكل تفاعلي , ولاكن عندما تكتب السكربت يجب مراعات أن هذه المرونه قد تضعك أمام ثغرات أمنيه خطيره أو غير متوقعه تكون أنت المسؤل عنها .لذالك أستعملها بأسلوب " محترف " , فيجب عليك تنفيذ و قراءة المزيد ولا تعتمد على النسخ و اللصق في التنفيذ .دعونا الأن نتعمق أكثر في ملفات السكربتفبُنية ملف السكربت تنقسم إلى خمسة أقسام
The Header Global declarations Sanity checks The main script Cleanupجميع الأقسام السابقة تلعب دور كبير جداً في تصميم السكربت , في الخطوات التاليه سترى كيف يمكنك تحسين نفسك في تتبع الأمثله عن طريق هذه الأقسامThe Headerفي هذا القسم يحتوى علىنوع الملف السكربت هل هو sh أم bash ... إلخمن الذي كتب هذا السكربتما هو رقم الإصدارما وظيفة السكربت أو شرح مبسط عن وظائفهما إذا كان هناك إختيارت له أم لا وهل هي إختيارات خارجيه أم داخليهطريقة التعامل معهيحتوي أول سطر في جزء الـ header على علامة مميزه وهي علامة ( # ) و هي العلامه الخاصة بالتعليقات كما ذكرت من قبل ولاكن في هذا السطر الأول في بداية ملف السكربت نكتب هذه العلامة ( # ) متبوعة بعلامة ( ! ) و بعدها نكتب مسار المترجم .ما معنى مسار المترجم ولماذا نضيفة ؟يقوم لينكس بقراءة هذه السطر قبل تنفيذه لباقي الملف لكي يحدد ما هو المترجم الذي سيتعامل معه هذا السكربت ...في أغلاب التوزيعات تستخدم Bash و هنا تكون المعلومه قد حددنا ملامحها .. لماذا ؟لأني سأكتب في أول سطر ملف السكربت مكان تواجد مترجم الـ Bash وهذا سهل جدا تحديده وهذا عن طريق تنفيذ هذا الأمر لكي نعرف مكان المترجم
$which bash
/bin/bash
يمكنني أن أكتب الناتج الأن في أول سطر وهذا لكي يكون السطر الأول بهذه الصوره
#!/bin/bash
ونفس الحال إذا كنت مستخدم للمترجم sh أو غيرهمالصوره النهائية لمنطقة الـ header تكون بهذه الصوره
كود:
#!/bin/bash
#
# Flush disks if nobody is on the computer
#
# Seif Abaza
# CVS: $Header$
shopt -s -o nounset
وصف سريع لما هو مكتوب :مسار المترجم الذي سنستعملهوصف سريع لما يقوم به السكربتمن الذي كتب السكربتخاصية CVS سأشرحها فيما بعد إن شاء اللهالأمر المكتوب هو أمر يكتشف بعض الأخطاء الإملائية الغير معروفه من قبل الإبلاغ للمتغيرات .Global declarationsجميع الإعلانات والتي تنطبق على مجمل السكربت ينبغي أن تكون في مقدمة السكربت ، تحت الـ header. وهي منطقة الـ Global فوضعها جميعاً في مكان واحد تجعل من السهل على أي شخص أن يصل إليها أثناء قراءة السيناريو الخاص بالسكربتمثال :
كود:
# Global Declarations
declare -rx SCRIPT=${0##*/} # SCRIPT is the name of this script
declare -rx who=”/usr/bin/who” # the who command - man 1 who
declare -rx sync=”/bin/sync” # the sync command - man 1 sync
declare -rx wc=”/usr/bin/wc” # the wc command - man 1 wc
Sanity Checksالقسم التالي وهو قسم الـ Sanity Checks يحمي السكربت من التغير الغير متوقع من الجهاز , في العادي عندما تنفذ الأوامر في سطر الأوامر , فيقوم الـ Bash بالبحث عن أماكن الأوامر داخل الجهاز , إذا لم يستطيع العثور عليها فربما من خطأ كتابي في الأمر وعندها سيقوم Bash بإخراج تقرير عن الخطأ , هذا السلوك الذي يتبعه Bash سلوك ممتاز للعمل معه بشكل تفاعلي لأنه بهاذا يوفر عليك الوقت و أي خطأ سيكون من السهل إصلاحة بالقليل من التعديلاتمن الخواص الأخرى للسكربت أنه يعمل تحت إشراف أي شخص بعد التأكد من صلاحياته عليه وصلاحيات الأوامر التي ستنفذ داخل السكربتالأمثال موجوده في المرفقات
إلى لقاء في الجزء الثاني من الدرسأتمنياتي لكم بالخير و الصحة
المصدر مجتمع لينُكس العربي
الملفات المرفقة
Part 1.tar.gz
(599 بايت, 385 مشاهدات)
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى