الفصل 6.3 - هياكل التحكم
الأهداف التعليمية
في نهاية هذا الفصل، ستكون قادرًا على:
- استخدام شروط if/else
- تنفيذ حلقات for و while
- استخدام case للاختيار المتعدد
- فهم عوامل الاختبار
- إدارة الأخطاء
شروط if/else
الصياغة الأساسية
#!/bin/bash
# if بسيط
if [ condition ]; then
commandes
fi
# if/else
if [ condition ]; then
commandes_si_vrai
else
commandes_si_faux
fi
# if/elif/else
if [ condition1 ]; then
commandes1
elif [ condition2 ]; then
commandes2
else
commandes3
fi
عوامل الاختبار
الملفات:
[ -f fichier ] # الملف موجود وعادي
[ -d repertoire ] # المجلد موجود
[ -e chemin ] # المسار موجود
[ -r fichier ] # قابل للقراءة
[ -w fichier ] # قابل للكتابة
[ -x fichier ] # قابل للتنفيذ
[ -s fichier ] # غير فارغ
السلاسل:
[ -z "$VAR" ] # فارغ
[ -n "$VAR" ] # غير فارغ
[ "$VAR1" = "$VAR2" ] # متساوي
[ "$VAR1" != "$VAR2" ] # مختلف
الأرقام:
[ $A -eq $B ] # متساوي
[ $A -ne $B ] # مختلف
[ $A -lt $B ] # أقل من
[ $A -le $B ] # أقل من أو يساوي
[ $A -gt $B ] # أكبر من
[ $A -ge $B ] # أكبر من أو يساوي
المنطق:
[ condition1 ] && [ condition2 ] # و
[ condition1 ] || [ condition2 ] # أو
[ ! condition ] # ليس
أمثلة
#!/bin/bash
# التحقق من الملف
if [ -f "/etc/passwd" ]; then
echo "الملف موجود"
else
echo "الملف غير موجود"
fi
# التحقق من المستخدم
if [ "$USER" = "root" ]; then
echo "أنت المستخدم الجذر"
elif [ "$UID" -eq 0 ]; then
echo "أنت المستخدم الجذر (حسب UID)"
else
echo "أنت $USER"
fi
# شروط متعددة
if [ -f "$1" ] && [ -r "$1" ]; then
echo "الملف موجود وقابل للقراءة"
fi
حلقة for
الصياغة
#!/bin/bash
# قائمة القيم
for item in valeur1 valeur2 valeur3; do
echo "العنصر: $item"
done
# المرور عبر الوسائط
for arg in "$@"; do
echo "الوسيط: $arg"
done
# تسلسل رقمي
for i in {1..10}; do
echo "العدد: $i"
done
# مع زيادة
for i in {1..10..2}; do
echo "العدد: $i"
done
# نمط C
for ((i=1; i<=10; i++)); do
echo "العدد: $i"
done
أمثلة
#!/bin/bash
# المرور عبر الملفات
for fichier in *.txt; do
echo "المعالجة: $fichier"
# معالجة...
done
# المرور عبر المجلدات
for dir in /home/*; do
if [ -d "$dir" ]; then
echo "المجلد: $dir"
fi
done
# المرور عبر المصفوفة
FRUITS=("تفاح" "موز" "برتقال")
for fruit in "${FRUITS[@]}"; do
echo "الفاكهة: $fruit"
done
حلقة while
الصياغة
#!/bin/bash
# while بسيط
while [ condition ]; do
commandes
done
# while مع القراءة
while read ligne; do
echo "السطر: $ligne"
done < fichier.txt
# while لا نهائي
while true; do
commandes
sleep 1
done
أمثلة
#!/bin/bash
# عداد
i=1
while [ $i -le 10 ]; do
echo "العدد: $i"
i=$((i + 1))
done
# قراءة الملف سطرًا بسطر
while IFS= read -r ligne; do
echo "السطر: $ligne"
done < /etc/passwd
# قائمة تفاعلية
while true; do
echo "1. الخيار 1"
echo "2. الخيار 2"
echo "3. الخروج"
read -p "الاختيار: " choix
case $choix in
1) echo "الخيار 1" ;;
2) echo "الخيار 2" ;;
3) break ;;
*) echo "اختيار غير صالح" ;;
esac
done
حلقة until
#!/bin/bash
# until (حتى تصبح الشرط صحيحًا)
i=1
until [ $i -gt 10 ]; do
echo "العدد: $i"
i=$((i + 1))
done
case - اختيار متعدد
الصياغة
#!/bin/bash
case $variable in
pattern1)
commandes1
;;
pattern2)
commandes2
;;
pattern3|pattern4)
commandes3
;;
*)
commandes_par_defaut
;;
esac
أمثلة
#!/bin/bash
# قائمة بسيطة
read -p "الاختيار (1-3): " choix
case $choix in
1)
echo "تم اختيار الخيار 1"
;;
2)
echo "تم اختيار الخيار 2"
;;
3)
echo "تم اختيار الخيار 3"
;;
*)
echo "اختيار غير صالح"
exit 1
;;
esac
# أنماط مع wildcards
case "$1" in
start)
echo "بدء"
;;
stop)
echo "إيقاف"
;;
restart|reload)
echo "إعادة تشغيل"
;;
*)
echo "الاستخدام: $0 {start|stop|restart}"
exit 1
;;
esac
التحكم في التدفق
break و continue
#!/bin/bash
# break: الخروج من الحلقة
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo $i
done
# continue: الانتقال إلى التكرار التالي
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue
fi
echo $i
done
exit
#!/bin/bash
# exit: الخروج من السكربت
if [ ! -f "$1" ]; then
echo "خطأ: الملف غير موجود"
exit 1
fi
# كود العودة
exit 0 # نجاح
exit 1 # خطأ عام
exit 2 # خطأ محدد
مثال كامل
#!/bin/bash
# سكربت معالجة الملفات
# التحقق من الوسائط
if [ $# -eq 0 ]; then
echo "الاستخدام: $0 ملف..."
exit 1
fi
# معالجة كل ملف
for fichier in "$@"; do
# التحقق من الوجود
if [ ! -f "$fichier" ]; then
echo "تحذير: $fichier غير موجود، تم تجاهله"
continue
fi
# التحقق من الأذونات
if [ ! -r "$fichier" ]; then
echo "خطأ: $fichier غير قابل للقراءة"
continue
fi
# المعالجة حسب الامتداد
case "$fichier" in
*.txt)
echo "معالجة نصية: $fichier"
# معالجة...
;;
*.log)
echo "معالجة سجل: $fichier"
# معالجة...
;;
*)
echo "نوع غير مدعوم: $fichier"
;;
esac
done
echo "تم الانتهاء من المعالجة"
ملخص
في هذا الفصل، تعلمت:
if/else: شروط مع عوامل الاختبار
for: حلقات مع قوائم، تسلسلات، مصفوفات
while: حلقات شرطية، قراءة الملفات
case: اختيار متعدد مع أنماط
التحكم: break، continue، exit
العوامل: ملفات، سلاسل، أرقام، منطق
الخطوات التالية
الفصل 6.4: الدوال و Cron
الوحدة 7: الشبكة والتكوين
تم إنشاء الفصل في: ديسمبر 2024