مقدمة إلى Bash Scripting: المتغيرات، الشروط، والحلقات

دقائق القراءة: 5

مقدمة إلى 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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *