ديف أوبس

كتابة سكربتات Shell بسهولة

دليل ميسّر لكتابة سكربتات Shell

تعتبر سكربتات Shell واحدة من أهم الأدوات التي يستخدمها مهندسو البرمجيات، مسؤولو الأنظمة، والمطورون بشكل عام لإدارة الأنظمة، أتمتة المهام، وتحسين الإنتاجية. في عالم الحوسبة، تُعد كتابة سكربتات Shell مهارة أساسية لكل من يتعامل مع بيئات يونكس (Unix) أو لينكس (Linux) أو حتى أنظمة ماكنتوش (macOS). يقدم هذا المقال دليلاً شاملاً ومفصلاً لكتابة سكربتات Shell، يشرح الأساسيات وصولاً إلى المفاهيم المتقدمة، مع التركيز على الجانب العملي والنظري معاً.


1. مقدمة حول سكربتات Shell

الـ Shell هو برنامج يعمل كواجهة بين المستخدم ونظام التشغيل، وهو يتلقى الأوامر وينفذها. هناك عدة أنواع من Shells مثل Bash، Zsh، Ksh، وTcsh، لكن أكثرها شيوعاً واستخداماً هو Bash (Bourne Again Shell) الذي يعتبر معياراً في أغلب توزيعات لينكس.

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


2. بداية كتابة سكربت Shell

2.1. اختيار محرر النصوص

يمكنك كتابة سكربتات Shell باستخدام أي محرر نصوص عادي مثل Nano, Vim, Emacs أو حتى محررات متقدمة مثل VS Code. يكفي أن يكون الملف بصيغة نصية عادية بدون تنسيق.

2.2. إنشاء ملف سكربت

ابدأ بإنشاء ملف جديد، مثلاً:

bash
touch myscript.sh

ثم افتح الملف بواسطة المحرر وابدأ بكتابة السكربت.

2.3. السطر الأول: Shebang

يُستخدم سطر الـ Shebang لتحديد أي Shell سيتم استخدامه لتنفيذ السكربت. مثال:

bash
#!/bin/bash

هذا السطر يجب أن يكون في بداية الملف، وهو يشير إلى أن السكربت سيتم تنفيذه باستخدام Bash.


3. أساسيات سكربتات Shell

3.1. الأوامر الأساسية

يمكنك استخدام أي أمر من أوامر الطرفية داخل السكربت مثل:

bash
echo "مرحبا بالعالم" ls -l pwd

3.2. المتغيرات

يمكن تعريف المتغيرات وتخزين القيم فيها لاستخدامها لاحقاً:

bash
NAME="محمد" echo "مرحباً يا $NAME"

لا تضع فراغات حول علامة التساوي = عند تعريف المتغير.

3.3. التعليقات

لإضافة تعليق يستخدم #:

bash
# هذا تعليق ولا يتم تنفيذه echo "هذا سطر تنفيذي"

3.4. قراءة المدخلات من المستخدم

يمكن قراءة مدخلات المستخدم باستخدام الأمر read:

bash
echo "أدخل اسمك:" read USERNAME echo "مرحباً $USERNAME"

4. التحكم في تدفق السكربت

4.1. الشروط If

يمكن تنفيذ أوامر بناءً على شرط:

bash
if [ $AGE -ge 18 ]; then echo "أنت بالغ" else echo "أنت قاصر" fi

يجب الانتباه إلى الفراغات حول الأقواس [ و].

4.2. الحلقات Loops

4.2.1. حلقة For

تستخدم لتكرار تنفيذ أوامر:

bash
for i in 1 2 3 4 5 do echo "العدد هو $i" done

4.2.2. حلقة While

تنفذ طالما الشرط صحيح:

bash
COUNTER=1 while [ $COUNTER -le 5 ] do echo "العداد: $COUNTER" ((COUNTER++)) done

5. الدوال Functions

الدوال تسهل إعادة استخدام الشيفرة وتقسيم السكربت لأجزاء منطقية:

bash
greet() { echo "مرحباً، هذه دالة ترحب بك!" } greet

يمكن أيضًا تمرير معاملات إلى الدوال:

bash
greet() { echo "مرحباً، $1" } greet "محمد"

6. التعامل مع الملفات والمجلدات

6.1. التحقق من وجود ملف أو مجلد

bash
if [ -f "file.txt" ]; then echo "الملف موجود" fi if [ -d "folder" ]; then echo "المجلد موجود" fi

6.2. إنشاء وحذف الملفات والمجلدات

bash
touch newfile.txt # إنشاء ملف جديد mkdir newfolder # إنشاء مجلد جديد rm oldfile.txt # حذف ملف rmdir oldfolder # حذف مجلد فارغ

7. التعامل مع المعطيات Parameters

يمكن تمرير معطيات للسكربت عند التشغيل:

bash
./myscript.sh arg1 arg2

داخل السكربت يمكن الوصول إليها عبر:

  • $1 المعطى الأول

  • $2 المعطى الثاني

  • $# عدد المعطيات

  • $@ جميع المعطيات

مثال:

bash
echo "المعطى الأول هو $1"

8. استخدام التوجيه Redirection

8.1. إعادة توجيه الإخراج

bash
ls > filelist.txt # كتابة ناتج الأمر في ملف

8.2. إضافة الإخراج إلى ملف

bash
echo "نص جديد" >> filelist.txt

8.3. إعادة توجيه الأخطاء

bash
ls nonexistingfile 2> error.log

9. استخدام الأنابيب Pipes

تسمح بتمرير مخرجات أمر كمدخل لأمر آخر:

bash
ps aux | grep bash

10. نصائح عملية لكتابة سكربتات Shell فعالة

  • التحقق من الأخطاء: يمكن استخدام set -e لجعل السكربت يتوقف عند أي خطأ.

  • استخدام التعليقات بشكل جيد: لشرح الأجزاء المعقدة من السكربت.

  • تنسيق الشيفرة: استخدام التراجع (Indentation) لتحسين القراءة.

  • اختبار السكربتات تدريجياً: لا تكتب سكربت كامل دفعة واحدة، بل جرب الأجزاء.

  • تجنب استخدام المسارات المطلقة: إلا عند الضرورة، لتسهيل النقل.


11. مثال عملي كامل على سكربت Shell

bash
#!/bin/bash # سكربت يقوم بعمل نسخة احتياطية لمجلد محدد SOURCE_DIR=$1 BACKUP_DIR=$2 DATE=$(date +%Y-%m-%d-%H-%M-%S) if [ ! -d "$SOURCE_DIR" ]; then echo "مجلد المصدر غير موجود!" exit 1 fi if [ ! -d "$BACKUP_DIR" ]; then echo "إنشاء مجلد النسخ الاحتياطية..." mkdir -p "$BACKUP_DIR" fi BACKUP_NAME="backup-$DATE.tar.gz" tar -czf "$BACKUP_DIR/$BACKUP_NAME" -C "$SOURCE_DIR" . if [ $? -eq 0 ]; then echo "تم إنشاء النسخة الاحتياطية بنجاح: $BACKUP_NAME" else echo "فشل في إنشاء النسخة الاحتياطية" fi

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


12. الأمن والسلامة في سكربتات Shell

عند كتابة سكربتات Shell، من الضروري اتباع بعض قواعد الأمن:

  • تجنب تنفيذ أوامر غير موثوقة داخل السكربت.

  • التحقق من صحة المدخلات التي يتم استقبالها.

  • عدم تشغيل السكربت كـ root إلا عند الضرورة.

  • تحديد صلاحيات الملفات بشكل مناسب لمنع تعديلها من قبل غير المخولين.


13. أدوات مساعدة لتطوير سكربتات Shell

  • ShellCheck: أداة لفحص السكربتات واكتشاف الأخطاء النمطية والأمنية.

  • Bash Debugger: لتتبع تنفيذ السكربت خطوة بخطوة.


14. ملخص المقارنة بين بعض أوامر Shell الأساسية

الأمر الوظيفة مثال الاستخدام
echo طباعة نص أو متغير echo "مرحبا"
read قراءة مدخلات من المستخدم read USER
if تنفيذ شرط if [ $x -eq 1 ]; then ...
for حلقة تكرار for i in 1 2 3; do ...
while حلقة بناء على شرط while [ $x -lt 5 ]; do ...
test أو [ ] تقييم الشروط [ -f file.txt ]
mkdir إنشاء مجلد mkdir newfolder
rm حذف ملفات أو مجلدات rm file.txt
tar ضغط وفك ضغط ملفات tar -czf archive.tar.gz dir

15. الخلاصة

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

يجب دائماً ممارسة الكتابة، اختبار السكربتات في بيئات آمنة، والاهتمام بأمن السكربتات وقراءة الأدلة وأفضل الممارسات الحديثة. ستساعد هذه الخطوات على بناء مهارات قوية تؤهل المهتمين لإدارة الأنظمة أو تطوير البرمجيات بشكل أكثر احترافية.


المراجع:

  1. Bash Reference Manual – The GNU Project

  2. Advanced Bash-Scripting Guide – Mendel Cooper