الفصل 6.2 - المتغيرات والمعاملات
الأهداف التعليمية
في نهاية هذا الفصل، ستكون قادرًا على:
- استخدام المتغيرات المتقدمة
- العمل مع معاملات السكربت
- فهم المتغيرات الخاصة
- استخدام المصفوفات
- إدارة متغيرات البيئة
المتغيرات المتقدمة
استبدال المتغيرات
#!/bin/bash
VAR="hello"
# القيمة الافتراضية
echo ${VAR:-"default"} # hello (إذا كانت VAR موجودة)
echo ${UNDEF:-"default"} # default (إذا لم تكن UNDEF موجودة)
# تعيين إذا لم تكن معرفة
echo ${VAR:="default"} # hello (VAR موجودة بالفعل)
echo ${UNDEF:="default"} # default (وتعين UNDEF)
# خطأ إذا لم تكن معرفة
echo ${VAR:?"VAR n'est pas définie"} # OK
echo ${UNDEF:?"UNDEF n'est pas définie"} # خطأ
# إزالة البادئة/اللاحقة
FILE="fichier.txt"
echo ${FILE%.txt} # fichier (يزيل .txt)
echo ${FILE#fichier} # .txt (يزيل fichier)
طول السلسلة
#!/bin/bash
TEXT="Linux"
echo ${#TEXT} # 5 (الطول)
استخراج جزء من السلسلة
#!/bin/bash
TEXT="Hello Linux World"
echo ${TEXT:6} # Linux World (من الموضع 6)
echo ${TEXT:6:5} # Linux (الموضع 6، الطول 5)
معاملات السكربت
المعاملات الموضعية
#!/bin/bash
# $0: اسم السكربت
# $1, $2, $3...: المعاملات
# $#: عدد المعاملات
# $@: جميع المعاملات (منفصلة)
# $*: جميع المعاملات (كسلسلة واحدة)
echo "Script: $0"
echo "الأول: $1"
echo "الثاني: $2"
echo "العدد: $#"
echo "الكل (@): $@"
echo "الكل (*): $*"
مثال:
./script.sh arg1 arg2 arg3
# $0 = ./script.sh
# $1 = arg1
# $2 = arg2
# $3 = arg3
# $# = 3
إزاحة المعاملات
#!/bin/bash
# shift: يزيح المعاملات
echo "1: $1"
shift
echo "2: $1" # كان $2
shift
echo "3: $1" # كان $3
استعراض المعاملات
#!/bin/bash
# الطريقة 1: $@
for arg in "$@"; do
echo "المعامل: $arg"
done
# الطريقة 2: $*
for arg in $*; do
echo "المعامل: $arg"
done
# الطريقة 3: while مع shift
while [ $# -gt 0 ]; do
echo "المعامل: $1"
shift
done
المصفوفات
التصريح
#!/bin/bash
# التصريح
FRUITS=("pomme" "banane" "orange")
# أو
FRUITS[0]="pomme"
FRUITS[1]="banane"
FRUITS[2]="orange"
الوصول
#!/bin/bash
FRUITS=("pomme" "banane" "orange")
# عنصر محدد
echo ${FRUITS[0]} # pomme
echo ${FRUITS[1]} # banane
# جميع العناصر
echo ${FRUITS[@]} # pomme banane orange
echo ${FRUITS[*]} # pomme banane orange
# الطول
echo ${#FRUITS[@]} # 3
# الفهارس
echo ${!FRUITS[@]} # 0 1 2
استعراض مصفوفة
#!/bin/bash
FRUITS=("pomme" "banane" "orange")
# بالقيمة
for fruit in "${FRUITS[@]}"; do
echo "الفاكهة: $fruit"
done
# بالفهرس
for i in "${!FRUITS[@]}"; do
echo "$i: ${FRUITS[$i]}"
done
متغيرات البيئة
التعريف
#!/bin/bash
# متغير محلي (للسكربت فقط)
LOCAL_VAR="local"
# متغير بيئة (مُصدّر)
export ENV_VAR="environment"
# أو
ENV_VAR="environment"
export ENV_VAR
المتغيرات النظامية الشائعة
#!/bin/bash
echo "HOME: $HOME"
echo "USER: $USER"
echo "PATH: $PATH"
echo "SHELL: $SHELL"
echo "PWD: $PWD"
echo "UID: $UID"
echo "EUID: $EUID"
تعديل PATH
#!/bin/bash
# إضافة إلى PATH
export PATH="$PATH:/chemin/vers/bin"
# مؤقت (للسكربت فقط)
PATH="$PATH:/chemin/vers/bin"
المتغيرات الخاصة
كود الإرجاع
#!/bin/bash
# $?: كود الإرجاع لآخر أمر
ls /tmp
echo "الكود: $?" # 0 إذا نجح
# اختبار
if [ $? -eq 0 ]; then
echo "نجاح"
else
echo "فشل"
fi
PID والعمليات
#!/bin/bash
echo "PID الحالي: $$"
echo "PID الأب: $PPID"
echo "آخر PID في الخلفية: $!"
خيارات shell
#!/bin/bash
# $-: الخيارات النشطة
echo "الخيارات: $-"
مثال كامل
#!/bin/bash
# سكربت مع معاملات ومصفوفات
# دالة المساعدة
afficher_aide() {
echo "Usage: $0 [OPTIONS] FICHIERS..."
echo "Options:"
echo " -h مساعدة"
echo " -v وضع تفصيلي"
echo " -o ملف الإخراج"
}
# المتغيرات
VERBEUX=false
OUTPUT=""
FICHIERS=()
# تحليل المعاملات
while [ $# -gt 0 ]; do
case $1 in
-h)
afficher_aide
exit 0
;;
-v)
VERBEUX=true
;;
-o)
shift
OUTPUT="$1"
;;
*)
FICHIERS+=("$1")
;;
esac
shift
done
# المعالجة
if [ ${#FICHIERS[@]} -eq 0 ]; then
echo "خطأ: لم يتم تحديد أي ملف"
exit 1
fi
[ "$VERBEUX" = true ] && echo "معالجة ${#FICHIERS[@]} ملف(ات)"
for fichier in "${FICHIERS[@]}"; do
[ "$VERBEUX" = true ] && echo "معالجة: $fichier"
# المعالجة...
done
ملخص
في هذا الفصل، تعلمت:
الاستبدال: \${VAR:-default}, \${VAR%pattern}, إلخ.
المعاملات: $0, $1-$n, $#, $@, $*
المصفوفات: التصريح، الوصول، الاستعراض
البيئة: export، المتغيرات النظامية
الخاصة: $?, $$, $PPID, $-
التحليل: while + case للمعاملات
الخطوات التالية
الفصل 6.3: هياكل التحكم
الفصل 6.4: الدوال و Cron
تم إنشاء الفصل في: ديسمبر 2024