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

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