كتابة سكربتات Bash: أتمتة المهام المتكررة
أول سكربت Bash: shebang والتنفيذ
سكربتات Bash تجمع عدة أوامر في ملف واحد للتنفيذ التلقائي. في البيئة الصناعية، السكربتات ضرورية لأتمتة جمع البيانات والنسخ الاحتياطي.
#!/bin/bash
# أول سكربت — التحقق من حالة الخادم
echo "=== حالة الخادم ==="
echo "التاريخ: $(date)"
echo "وقت التشغيل: $(uptime -p)"
df -h /
السطر #!/bin/bash يخبر النظام باستخدام Bash للتنفيذ. شغّله بـ:
chmod +x hello.sh && ./hello.sh
المتغيرات ومعاملات سطر الأوامر
#!/bin/bash
SERVER_NAME="factory-srv-01"
LOG_DIR="/var/log/scada"
MAX_TEMP=85
TIMESTAMP=$(date +%Y-%m-%d_%H:%M:%S)
echo "الخادم: $SERVER_NAME في $TIMESTAMP"
echo "الحد الأقصى للحرارة: ${MAX_TEMP} درجة"
لا تضع مسافات حول = عند تعريف المتغيرات.
معاملات سطر الأوامر
#!/bin/bash
# استخدام: ./check_sensor.sh sensor_A /var/log/sensors.log
SENSOR_ID=$1 # المعامل الأول
LOG_FILE=$2 # المعامل الثاني
echo "فحص المستشعر: $SENSOR_ID"
grep "$SENSOR_ID" "$LOG_FILE" | tail -5
الشروط: if و test و [[ ]]
#!/bin/bash
TEMP=$1
if [[ $TEMP -gt 80 ]]; then
echo "تحذير: الحرارة مرتفعة ($TEMP درجة)"
elif [[ $TEMP -gt 60 ]]; then
echo "الحرارة طبيعية ($TEMP درجة)"
else
echo "الحرارة منخفضة ($TEMP درجة)"
fi
عوامل المقارنة الرقمية
-eq (يساوي)، -ne (لا يساوي)، -gt (أكبر)، -lt (أصغر)، -ge (أكبر أو يساوي)، -le (أصغر أو يساوي).
فحص الملفات والنصوص
if [[ -f "/etc/scada/modbus.conf" ]]; then echo "الملف موجود"; fi
if [[ -d "/var/log/scada" ]]; then echo "المجلد موجود"; fi
if [[ "$STATUS" == "ALARM" ]]; then echo "إنذار!"; fi
الحلقات: for و while و until
#!/bin/bash
# حلقة for على مستشعرات
for SENSOR in sensor_A sensor_B sensor_C; do
echo "فحص $SENSOR..."
grep "$SENSOR" /var/log/sensors.log | tail -1
done
# حلقة على ملفات
for FILE in /var/log/scada/*.log; do
echo "$(basename "$FILE"): $(du -sh "$FILE" | cut -f1)"
done
#!/bin/bash
# مراقبة مستمرة
while true; do
TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
TEMP_C=$((TEMP / 1000))
echo "$(date): $TEMP_C درجة"
[[ $TEMP_C -gt 80 ]] && echo "تحذير: حرارة مرتفعة!"
sleep 5
done
قراءة ملف سطراً بسطر
while IFS=',' read -r timestamp sensor type value status; do
[[ "$status" == "ALARM" ]] && echo "إنذار: $sensor - $type = $value"
done < sensors.csv
الدوال: إعادة استخدام الكود
#!/bin/bash
check_disk_space() {
local THRESHOLD=$1
local USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [[ $USAGE -gt $THRESHOLD ]]; then
echo "تحذير: استخدام القرص $USAGE% (الحد: $THRESHOLD%)"
return 1
fi
echo "القرص: $USAGE% — طبيعي"
return 0
}
log_message() {
echo "$(date +%Y-%m-%d_%H:%M:%S) [$1] $2" >> /var/log/monitor.log
}
check_disk_space 80
log_message "INFO" "فحص يومي مكتمل"
مثال عملي: سكربت يجمع بيانات المستشعرات كل 5 دقائق ويُرسل تقريراً
#!/bin/bash
LOG_DIR="/var/log/scada"
REPORT_DIR="/data/reports"
TIMESTAMP=$(date +%Y-%m-%d_%H%M)
REPORT="${REPORT_DIR}/report_${TIMESTAMP}.txt"
mkdir -p "$REPORT_DIR"
generate_report() {
echo "=== تقرير المستشعرات — $(date) ===" > "$REPORT"
local ALARMS=0
for LOG in "$LOG_DIR"/sensor_*.log; do
local LAST=$(tail -1 "$LOG")
echo "$(basename "$LOG" .log): $LAST" >> "$REPORT"
echo "$LAST" | grep -q "ALARM" && ALARMS=$((ALARMS + 1))
done
echo "إجمالي الإنذارات: $ALARMS" >> "$REPORT"
return $ALARMS
}
generate_report
[[ $? -gt 0 ]] && echo "تنبيه: إنذارات نشطة — $REPORT" || echo "طبيعي — $REPORT"
الخلاصة
تعلمت في هذا الدرس أساسيات سكربتات Bash: المتغيرات والشروط والحلقات والدوال. سكربتات Bash هي أداة الأتمتة الأولى في البيئات الصناعية لجمع البيانات ومراقبة الأنظمة وإنشاء التقارير. في الدرس القادم سنتعلم أدوات الشبكات لتشخيص مشاكل الاتصال.