الرئيسية قاعدة المعرفة البرمجة والمنطق كتابة سكربتات Bash: أتمتة المهام المتكررة
البرمجة والمنطق

كتابة سكربتات 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 هي أداة الأتمتة الأولى في البيئات الصناعية لجمع البيانات ومراقبة الأنظمة وإنشاء التقارير. في الدرس القادم سنتعلم أدوات الشبكات لتشخيص مشاكل الاتصال.

bash scripting variables loops functions automation سكربت باش المتغيرات الحلقات الدوال الأتمتة