مدخل إلى كتابة سكربتات الصدفة (Shell Scripting)، لينكس، سطر الأوامر، البرمجة النصية، Bash
تُعد سكربتات الصدفة (Shell Scripts) أحد الأعمدة الأساسية لإدارة أنظمة التشغيل المستندة إلى يونكس/لينكس. إنها أدوات قوية تسمح للمستخدمين بتنفيذ أوتوماتيكي لمهام مكررة، تحليل البيانات، إدارة النظام، وتخصيص بيئة العمل. كتابة سكربتات الصدفة ليست فقط مهارة مفيدة، بل ضرورية لأي شخص يتعامل مع بيئة لينكس أو يرغب في اكتساب تحكم كامل في النظام باستخدام سطر الأوامر.
تعريف سكربت الصدفة
سكربت الصدفة هو ملف نصي يحتوي على سلسلة من أوامر سطر الأوامر التي تُنفذ بواسطة مفسر الصدفة (مثل Bash). يتم استخدامه لأتمتة المهام المتكررة أو المعقدة، ويمنح القدرة على الجمع بين أوامر متعددة مع المنطق الشرطي، التكرار، ومعالجة الإدخال والإخراج.
أنواع الصدفات (Shells)
يوجد عدد من أنواع الصدفات في أنظمة يونكس/لينكس، كل منها يملك مفسره الخاص:
| اسم الصدفة | الوصف |
|---|---|
| Bash | الأكثر شيوعاً في توزيعات لينكس الحديثة |
| sh | الصدفة القياسية التقليدية |
| zsh | مطورة من Bash مع ميزات إضافية |
| csh | مستوحاة من لغة C |
| ksh | KornShell، مع دعم جيد للبرمجة النصية |
التركيز الأساسي في هذا المقال سيكون على Bash، نظرًا لانتشاره الكبير وسهولة تعلمه.
لماذا استخدام سكربتات الصدفة؟
-
أتمتة المهام المتكررة: مثل نسخ الملفات، أرشفتها، إرسال بريد إلكتروني، تحديث الأنظمة.
-
تحسين الإنتاجية: تنفيذ مئات الأوامر بضغطة واحدة.
-
إدارة النظام: مراقبة العمليات، إدارة المستخدمين، جدولة المهام.
-
قوة التخصيص: إنشاء بيئة عمل مخصصة وسيناريوهات تشغيل مرنة.
-
التكامل مع أدوات أخرى: يمكن دمجها مع أدوات مثل awk، sed، grep وغيرها من الأدوات النصية.
البنية الأساسية لسكربت الصدفة
كل سكربت يبدأ بتحديد المفسر (Shebang):
bash#!/bin/bash
هذا السطر يخبر النظام أن هذا السكربت يجب أن يُنفذ باستخدام مفسر Bash.
مثال بسيط على سكربت:
bash#!/bin/bash
echo "مرحباً بك في عالم سكربتات الصدفة"
لحفظه وتنفيذه:
bashchmod +x script.sh
./script.sh
المتغيرات
يمكنك تعريف متغيرات بسهولة في سكربت الصدفة:
bash#!/bin/bash
الاسم="أحمد"
echo "مرحباً، $الاسم"
-
لا تضع مسافات حول
=. -
استخدم
$لاستدعاء القيمة.
المعاملات (Arguments)
يستطيع السكربت استقبال مدخلات عند التشغيل:
bash#!/bin/bash
echo "أول معامل هو: $1"
$0 يشير إلى اسم السكربت، $1 إلى أول معامل، $2 إلى الثاني، وهكذا.
للتعامل مع عدد غير محدد من المعاملات:
bash#!/bin/bash
for arg in "$@"
do
echo "المعامل: $arg"
done
الشروط (If statements)
التحكم في التدفق باستخدام الشروط:
bash#!/bin/bash
if [ $1 -gt 10 ]
then
echo "أكبر من 10"
else
echo "10 أو أقل"
fi
-
استخدم
[ ]مع فراغات. -
-gtتعني “أكبر من”،-lt“أقل من”،-eq“يساوي”.
التكرار (Loops)
حلقة for
bashfor i in 1 2 3 4 5
do
echo "الرقم: $i"
done
حلقة while
bashcount=1
while [ $count -le 5 ]
do
echo "العدد: $count"
((count++))
done
الدوال (Functions)
bash#!/bin/bash
مرحباً () {
echo "أهلاً، $1"
}
مرحباً "ليلى"
-
يمكن استخدام دوال لإعادة استخدام الشيفرة.
-
المتغير
$1داخل الدالة يشير إلى أول معامل مرر للدالة.
القراءة من المستخدم
bash#!/bin/bash
read -p "ما اسمك؟ " الاسم
echo "أهلاً بك يا $الاسم"
read تُستخدم لأخذ الإدخال من المستخدم.
التعامل مع الملفات
القراءة من ملف:
bash#!/bin/bash
while read سطر
do
echo "قرأت: $سطر"
done < الملف.txt
الكتابة إلى ملف:
bashecho "هذا محتوى جديد" >> الملف.txt
التحقق من وجود ملف:
bashif [ -f "بيانات.txt" ]; then
echo "الملف موجود"
else
echo "الملف غير موجود"
fi
إدارة الأخطاء والخروج
-
الكود
exitيحدد حالة الخروج من السكربت:
bashif [ ! -f "config.cfg" ]; then
echo "الملف غير موجود"
exit 1
fi
-
0يعني نجاح، وأي رقم آخر يعني فشل.
تنفيذ أوامر خارجية
يمكن تنفيذ أوامر النظام داخل السكربت:
bashالتاريخ=$(date)
echo "الوقت الحالي: $التاريخ"
-
يتم استخدام الأقواس
$()للحصول على مخرجات الأوامر.
معالجة النصوص باستخدام أدوات خارجية
باستخدام grep
bashgrep "كلمة" الملف.txt
باستخدام awk
bashawk '{print $1}' الملف.txt
باستخدام sed
bashsed 's/قديم/جديد/g' الملف.txt
السكربتات التفاعلية
يمكن جعل السكربت يتفاعل مع المستخدم أو البيئة:
bash#!/bin/bash
read -p "هل ترغب في المتابعة؟ (y/n): " الخيار
if [[ "$الخيار" == "y" ]]; then
echo "جاري المتابعة..."
else
echo "تم الإلغاء."
fi
سكربتات الصدفة المجدولة (crontab)
تُستخدم لتنفيذ السكربتات في مواعيد مجدولة.
عرض المهام المجدولة:
bashcrontab -l
إضافة مهمة:
bashcrontab -e
مثال على تنفيذ سكربت كل يوم في الساعة 7 مساءً:
arduino0 19 * * * /home/user/script.sh
أفضل الممارسات
-
التعليق على الكود لتوضيح الغرض من كل جزء.
-
التحقق من صلاحيات الملفات.
-
التعامل مع الأخطاء بعناية.
-
استخدام متغيرات واضحة الأسماء.
-
تجنب استدعاء أوامر خطيرة بدون تحقق.
أدوات المساعدة في كتابة سكربتات الصدفة
-
ShellCheck: أداة لتحليل السكربتات واكتشاف الأخطاء.
-
set -x / set -e:
-
set -x: لطباعة كل أمر قبل تنفيذه (لأغراض التصحيح). -
set -e: لإيقاف السكربت عند أول خطأ.
-
مثال تطبيقي: سكربت نسخ احتياطي تلقائي
bash#!/bin/bash
الوجهة="/backup"
المصدر="/home/user/documents"
التاريخ=$(date +%F)
الملف="backup-$التاريخ.tar.gz"
tar -czf "$الوجهة/$ملف" "$المصدر"
echo "تم إنشاء النسخة الاحتياطية في $الوجهة/$الملف"
هذا السكربت يقوم بضغط مجلد المستندات إلى ملف أرشيف يومي.
الجدول التالي يلخص بعض الأوامر المهمة:
| الأمر | الوظيفة |
|---|---|
echo |
طباعة نص |
read |
قراءة مدخل من المستخدم |
if, else |
تنفيذ الشروط |
for, while |
تنفيذ التكرار |
chmod |
تغيير صلاحيات الملف |
./script.sh |
تنفيذ السكربت |
crontab |
جدولة تنفيذ السكربتات |
grep |
البحث في النصوص |
awk |
تحليل النصوص المعتمدة على الأعمدة |
sed |
التعديل على النصوص |
الخلاصة
كتابة سكربتات الصدفة تعتبر مهارة محورية لأي مستخدم لأنظمة لينكس، سواء أكان مدير نظام، مطوراً، أو مستخدماً عادياً. القدرة على التحكم التام في المهام وتخصيص بيئة العمل من خلال السكربتات تعني كفاءة أعلى وتحكماً أعمق. من خلال تعلم الأساسيات والتدرج في بناء السكربتات الأكثر تعقيداً، يمكن تحويل أي بيئة عمل إلى منظومة مرنة وقابلة للتطوير باستخدام أدوات مجانية وبسيطة.
المراجع:

