انتقل إلى المحتوى الرئيسي

الفصل 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