← رجوع

Bash Script | كأداة يومية في نظام لينكس

R

UNIXMAN

Dec 30, 2025

Article Image

كيف صرت أستخدم Bash Script يوميًا بدل ما أكرر نفس الأوامر

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

وش المشكلة اللي خلتني أحتاج Bash Script؟

بما إن لينكس هو نظامي الأساسي، صرت أسوي أشياء متكررة يوميًا:
  • الدخول على سيرفرات مختلفة
  • تشغيل سكربتات باك أب
  • نسخ ملفات بين مسارات
  • تشغيل أو إيقاف خدمات
  • فحص وجود ملفات أو مجلدات
كلها أوامر بسيطة، لكن تنفيذها يدويًا:
  • يضيع وقت
  • يزيد احتمالية الخطأ
  • يعتمد على الذاكرة أكثر من النظام
هنا بدأت أفكر: ليش أكرر شيء النظام يقدر يسويه عني؟

أول سكربت كتبته (وأبسط واحد)

أول سكربت كتبته كان بسيط جدًا، لكنه فتح لي الباب للفكرة كاملة.
#!/bin/bash
echo "Hello Linux"
أعطيته صلاحية تنفيذ:
chmod +x hello.sh
وشغلته:
./hello.sh
وقتها فهمت إن Bash Script مو شيء معقد، هو مجرد أوامر لينكس مرتبة بشكل يخليها قابلة لإعادة الاستخدام.

ليش سطر #!/bin/bash مهم؟

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

جزئية مهمة: كيف ربطت Bash Script مع SSH

في البداية كنت أدخل السيرفرات بالطريقة التقليدية:
ssh user@server-ip -p 2222
وكل مرة أكتب:
  • IP
  • بورت
  • اسم مستخدم
ومع كثرة السيرفرات، صارت الأخطاء واردة، وأحيانًا أدخل سيرفر غير اللي أقصده. بعد ما رتبت اتصال SSH باستخدام المفاتيح وملف ~/.ssh/config، بدأت أستخدم Bash Script لتنظيم الدخول نفسه. مثال سكربت بسيط للدخول على السيرفرات:
#!/bin/bash

case "$1" in
  vps)
    ssh vps
    ;;
  home)
    ssh homeserver
    ;;
  *)
    echo "الاستخدام:"
    echo "connect vps"
    echo "connect home"
    ;;
esac
أعطيه صلاحية تنفيذ:
chmod +x connect
وأستخدمه كذا:
./connect vps
./connect home
بدون كتابة IP أو بورت أو اسم مستخدم. طريقة إعداد مفاتيح SSH وتنظيم الاتصال شرحتها بالتفصيل في مقال مستقل، وهنا أضع الرابط له:
مقال إعداد SSH بالمفاتيح

استخدام المتغيرات (شيء أعتمد عليه دايم)

بدل ما أكرر نفس المسارات داخل السكربت، أستخدم متغيرات:
#!/bin/bash

BACKUP_DIR="/home/user/backups"
SOURCE_DIR="/var/www/project"

echo "Backup from $SOURCE_DIR to $BACKUP_DIR"
الميزة:
  • تغيير القيم من مكان واحد
  • السكربت يصير أوضح
  • أقل عرضة للأخطاء

التحقق قبل التنفيذ

من أهم الأشياء اللي تعلمتها: لا تفترض إن كل شيء موجود.
if [ ! -d "$SOURCE_DIR" ]; then
  echo "Source directory not found"
  exit 1
fi
هذا الشرط أنقذني أكثر من مرة من تنفيذ سكربتات فاشلة أو حذف أشياء غلط.

تنفيذ الأوامر بناءً على النجاح أو الفشل

صرت أستخدم && و || كثير داخل السكربتات:
cp file.txt /backup && echo "Copied successfully"
أو:
mkdir backup || echo "Failed to create directory"
بهذا الشكل السكربت ما يكمل بشكل أعمى، بل يتصرف حسب نتيجة كل أمر.

الحلقات (Loops)

الحلقات وفرت علي وقت كبير، خصوصًا في التعامل مع ملفات متعددة:
for file in *.log; do
  cp "$file" /backup/logs/
done
بدل ما أكتب أمر لكل ملف، السكربت يتكفل بالموضوع.

التحقق من المستخدم

بعض السكربتات ما أبغى أحد يشغلها إلا بصلاحيات معينة:
if [ "$(whoami)" != "root" ]; then
  echo "Run this script as root"
  exit 1
fi
هذا يمنع أخطاء كثيرة خصوصًا في سكربتات النظام.

تسجيل الخرج (Logging)

التسجيل صار جزء أساسي في أي سكربت أكتبه. مثال:
echo "Backup started at $(date)" >> backup.log
أو تشغيل السكربت مع تسجيل كامل:
./backup.sh >> backup.log 2>&1
لأن أي خطأ يصير، يكون عندك سجل ترجع له.

ليش Bash Script صار جزء من نظامي اليومي

اليوم أي شيء أكرره أكثر من مرة، أسأل نفسي: ليش ما يكون سكربت؟ Bash Script خلاني:
  • أشتغل أسرع
  • أقلل الأخطاء
  • أبني نظام يعتمد على نفسه

الخاتمة

ما تعلمت Bash Script دفعة وحدة، تعلمته من الاستخدام اليومي، ومن مشاكل حقيقية. كل سكربت كتبته كان حل لمشكلة واجهتني. ومع الوقت، صرت أشوف لينكس كنظام أقدر أبرمجه على مزاجي، مو مجرد أوامر أكتبها.