مقدمة إلى Bash Scripting: المتغيرات، الشروط، والحلقات
مقدمة إلى Bash Scripting: المتغيرات، الشروط، والحلقات
تُعد Bash Scripting من أهم المهارات العملية لأي شخص يعمل على لينكس، سواء كان مسؤول أنظمة، مطوراً، أو حتى مستخدماً متقدماً يريد أتمتة المهام اليومية. الفكرة الأساسية بسيطة: بدلاً من تنفيذ الأوامر يدوياً مرة بعد مرة داخل الطرفية، يمكنك جمعها في ملف واحد وتشغيلها كسيناريو متكامل يوفر الوقت ويقلل الأخطاء البشرية.
إذا كنت قد قرأت سابقاً الدخول الأول إلى الطرفية (Terminal): الأوامر الأساسية والمساعدة (man, help)، فستجد أن Bash Script هو الامتداد الطبيعي لتلك المهارات. كما أن فهم الأنابيب وإعادة التوجيه (Pipes and Redirections: |, >, >>) يمنحك قوة إضافية عند بناء سكربتات أكثر ذكاءً ومرونة.
في هذا المقال سنركز على ثلاثة أعمدة أساسية في Bash: المتغيرات، الشروط، والحلقات. هذه المفاهيم هي ما يحوّل ملف الأوامر من نص ثابت إلى برنامج صغير قادر على اتخاذ قرارات ومعالجة البيانات وتنفيذ مهام متكررة بشكل احترافي.
ما هو Bash Script ولماذا يهم؟
Bash هو مفسّر أوامر Shell شائع جداً في أنظمة لينكس ويعمل كواجهة بين المستخدم والنظام. عند كتابة سكربت Bash فأنت تكتب سلسلة تعليمات يمكن للنظام تنفيذها بالتسلسل، مع دعم للمتغيرات والتفرعات المنطقية والتكرار.
تظهر أهمية Bash بوضوح في مهام مثل النسخ الاحتياطي، فحص السجلات، إدارة الملفات، مراقبة الخدمات، وأتمتة أعمال الصيانة. ولهذا يرتبط بشكل مباشر بموضوعات مثل جدولة المهام التلقائية باستخدام (Cron Jobs) ومراقبة السجلات (Logs) وتحليل الأخطاء (journalctl, /var/log).
بنية سكربت Bash الصحيحة
أي سكربت جيد يبدأ غالباً بسطر shebang الذي يحدد المفسّر المستخدم. بعد ذلك تكتب أوامرك، ثم تحفظ الملف وتعطيه صلاحية التنفيذ. هذا الأساس ضروري قبل الانتقال إلى المنطق البرمجي.
#!/bin/bash
echo "Hello from Bash"
بعد حفظ الملف، يمكنك منحه صلاحية التنفيذ باستخدام chmod +x script.sh ثم تشغيله عبر ./script.sh. وهذا يرتبط مباشرة بفهم إدارة الصلاحيات والملكية (Chmod, Chown, Sudo).
احرص دائماً على تحديد المفسّر بشكل صريح في أعلى الملف. الاعتماد على البيئة الافتراضية دون shebang قد يؤدي إلى سلوك مختلف بين الأنظمة أو المستخدمين.
المتغيرات في Bash
تعريف المتغيرات واستخدامها
المتغير في Bash هو اسم يشير إلى قيمة يمكن استخدامها لاحقاً. لا تضع مسافات حول علامة = عند التعريف، لأن Bash سيفسر ذلك بشكل خاطئ.
#!/bin/bash
name="Ahmed"
age=29
echo "Name: $name"
echo "Age: $age"
يمكن أيضاً استخدام الصيغة ${name} عندما تريد دمج المتغير داخل نص أطول بشكل واضح. هذه الصيغة مهمة خصوصاً عندما يصبح اسم المتغير ملاصقاً لأحرف أخرى.
قراءة مدخلات المستخدم
واحدة من أكثر الاستخدامات شيوعاً هي استقبال قيمة من المستخدم أثناء التنفيذ. يتم ذلك عبر الأمر read.
#!/bin/bash
read -p "Enter your username: " username
echo "Welcome, $username"
هذا النمط مفيد عند بناء سكربتات تفاعلية لإدارة المستخدمين أو الملفات أو تشغيل أوامر صيانة مخصصة. ويمكن دمجه لاحقاً مع مفاهيم من إدارة المستخدمين والمجموعات (Users and Groups Management).
المتغيرات الخاصة
يوفر Bash مجموعة متغيرات خاصة تسهّل التعامل مع المدخلات وحالة التنفيذ. من أهمها:
$0اسم السكربت.$1و$2أول وثاني وسيط مررته للسكربت.$#عدد الوسائط.$?كود الخروج لآخر أمر تم تنفيذه.
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Number of arguments: $#"
الشروط في Bash
الشروط هي ما يجعل السكربت قادراً على اتخاذ قرار بناءً على قيمة أو حالة معينة. أكثر بنية شيوعاً هي if مع اختبارات منطقية أو نصية أو رقمية.
استخدام if مع المقارنات
#!/bin/bash
read -p "Enter a number: " num
if [ "$num" -gt 10 ]; then
echo "The number is greater than 10"
else
echo "The number is 10 or less"
fi
في المثال السابق استخدمنا -gt للمقارنة الرقمية. وهناك عوامل أخرى مثل -eq للمساواة و-lt للأصغر.
فحص الملفات والمجلدات
من الاستخدامات العملية جداً للشروط التحقق من وجود ملف أو مجلد قبل التعامل معه، خاصة عند العمل على التعامل مع الملفات والمجلدات (Navigation, CRUD Operations).
#!/bin/bash
file="/etc/passwd"
if [ -f "$file" ]; then
echo "File exists"
else
echo "File does not exist"
fi
أشهر اختبارات الملفات تشمل:
-fللتحقق من أن الهدف ملف عادي.-dللتحقق من أنه مجلد.-rلإمكانية القراءة.-wلإمكانية الكتابة.-xلإمكانية التنفيذ.
عند اختبار المتغيرات النصية داخل الشروط، ضعها بين علامتي اقتباس دائماً. هذا يمنع كثيراً من الأخطاء المرتبطة بالقيم الفارغة أو القيم التي تحتوي على مسافات.
الحلقات في Bash
الحلقات تسمح بتكرار تنفيذ أوامر معينة على مجموعة عناصر أو إلى أن يتحقق شرط محدد. وهي ضرورية جداً في أتمتة المهام الإدارية وتحليل الملفات وتشغيل أوامر جماعية.
حلقة for
تُستخدم عادةً عند المرور على قائمة عناصر معروفة مسبقاً، مثل أسماء ملفات أو قيم ثابتة.
#!/bin/bash
for user in ali sara omar; do
echo "Creating report for $user"
done
ويمكن دمجها مع أوامر البحث مثل البحث المتقدم في النظام باستخدام (find, locate, grep) لمعالجة نتائج متعددة بشكل آلي.
حلقة while
تعمل حلقة while طالما أن الشرط صحيح، وهي مناسبة للعدادات أو لقراءة الملفات سطراً بسطر.
#!/bin/bash
counter=1
while [ $counter -le 5 ]; do
echo "Counter: $counter"
counter=$((counter + 1))
done
لاحظ هنا استخدام التوسعة الحسابية $(( )) لإجراء العمليات الرقمية داخل Bash بشكل مباشر.
مثال عملي: سكربت لفحص مجلد وإنشاء تقرير مبسط
هذا المثال يجمع بين المتغيرات، الشروط، والحلقات في سيناريو قريب من العمل الحقيقي. الفكرة: التحقق من وجود مجلد، ثم استعراض الملفات داخله، مع عدّ العناصر المعثور عليها.
#!/bin/bash
read -p "Enter directory path: " target_dir
count=0
if [ -d "$target_dir" ]; then
echo "Directory exists: $target_dir"
for item in "$target_dir"/*; do
if [ -e "$item" ]; then
echo "Found: $(basename "$item")"
count=$((count + 1))
fi
done
echo "Total items: $count"
else
echo "Directory does not exist"
fi
هذا النمط مفيد جداً عند إعداد أدوات داخلية لفحص محتويات مجلدات النسخ الاحتياطي أو سجلات التطبيقات أو ملفات المشاريع. ومع التوسع لاحقاً يمكنك ربطه بأوامر من أدوات عرض ومعالجة النصوص (cat, nano, vim, less, tail) لتحليل المحتوى نفسه، لا مجرد أسماء الملفات.
أفضل الممارسات عند كتابة سكربتات Bash
- ابدأ دائماً بسطر
#!/bin/bash. - استخدم أسماء متغيرات واضحة مثل
backup_dirبدلاً من أسماء مبهمة. - ضع المتغيرات بين اقتباسات داخل الشروط والأوامر الحساسة.
- اختبر السكربت على بيانات آمنة قبل تشغيله على بيئة إنتاج.
- أضف رسائل واضحة للمستخدم عند النجاح أو الفشل.
السكربت الجيد ليس فقط الذي يعمل، بل الذي يظل مفهوماً وقابلاً للصيانة بعد أشهر. الوضوح في التسمية وبنية الكود أهم من الاختصار المبالغ فيه.
خاتمة
فهم المتغيرات، الشروط، والحلقات في Bash هو نقطة التحول من مستخدم ينفذ أوامر فردية إلى شخص يبني أدوات أتمتة حقيقية. هذه الأساسيات ستساعدك لاحقاً على كتابة سكربتات لإدارة الخدمات، تحليل السجلات، التعامل مع المستخدمين، وجدولة المهام بشكل احترافي داخل بيئات لينكس.
ابدأ بسكربتات صغيرة، ثم طوّرها تدريجياً بإضافة مدخلات، اختبارات، وتكرار ذكي. ومع الوقت ستكتشف أن Bash ليس مجرد Shell، بل أداة عملية قوية للغاية لتبسيط إدارة الأنظمة ورفع الإنتاجية.
7 comments