كيف صرت أستخدم 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
- بورت
- اسم مستخدم
#!/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 خلاني:- أشتغل أسرع
- أقلل الأخطاء
- أبني نظام يعتمد على نفسه