#!/bin/bash# تعريف دالة مع متغيرات محليةprocess_file() {
local file="$1"local max_lines="${2:-100}"local count=0
while IFS= read -r line; do
((count++))
[[ $count -gt $max_lines ]] && breakecho"$line"done < "$file"
}
# دالة تُرجع قيمةget_file_size() {
local file="$1"local size
size=$(stat -c%s "$file" 2>/dev/null) || return 1
echo"$size"return 0
}
# استخدام
result=$(get_file_size "data.txt") && echo"Size: $result bytes"
المصفوفات (Arrays)
مصفوفات عادية
# تعريف
fruits=("تفاح""موز""برتقال""عنب")
# إضافة عناصر
fruits+=("فراولة")
# الوصولecho"${fruits[0]}"# تفاحecho"${fruits[@]}"# جميع العناصرecho"${#fruits[@]}"# عدد العناصر# التكرارfor fruit in"${fruits[@]}"; doecho"$fruit"done# التقطيعecho"${fruits[@]:1:2}"# موز برتقال
مصفوفات Associative (القواميس)
# تعريف (تتطلب Bash 4+)declare -A config
config=(
["db_host"]="localhost"
["db_port"]="27017"
["db_user"]="admin"
)
# الوصولecho"${config[db_host]}"# التكرار على المفاتيح والقيمfor key in"${!config[@]}"; doecho"$key = ${config[$key]}"done# التحقق من وجود مفتاحif [[ -v config["db_host"] ]]; thenecho"db_host موجود"fi
معالجة النصوص (String Manipulation)
text=" Hello, World! Bash Scripting "# إزالة المسافات
trimmed="${text#"${text%%[![:space:]]*}"}"
trimmed="${trimmed%"${trimmed##*[![:space:]]}"}"# استبدالecho"${text/World/المستخدم}"# أول تطابقecho"${text// /-}"# كل المسافاتecho"${text/# /}"# بداية السطرecho"${text/% /}"# نهاية السطر# تحويل حالة الأحرف (Bash 4+)
upper="${text^^}"# إلى uppercase
lower="${text,,}"# إلى lowercase# استخراج جزءecho"${text:7:5}"# Worldecho"${text: -9}"# Scripting# التقسيم باستخدام IFS
IFS=','read -ra parts <<< "a,b,c,d"for part in"${parts[@]}"; doecho"$part"done# الطولecho"${#text}"
معالجة الأخطاء (Error Handling)
set -e — التوقف عند أول خطأ
#!/bin/bashset -e # يخرج عند أول أمر يفشلset -u # يخرج عند استخدام متغير غير معرّفset -o pipefail # يفشل pipeline إذا فشل أي أمر فيه# أو كلها معًاset -euo pipefail