Functions في Bash Scripting: تنظيم السكربتات باحتراف

كلما كبر سكربت Bash، يصبح تنظيمه أصعب بدون Functions. الدوال هي الطريقة الأساسية لجعل السكربت واضحًا وقابلًا لإعادة الاستخدام.

في هذا الدرس ستتعلم تعريف الدوال واستدعاءها وتمرير القيم بينها بشكل عملي.

لماذا نستخدم Functions في Bash؟

  • تقليل تكرار نفس الأوامر
  • تنظيم السكربت إلى وحدات واضحة
  • تسهيل الصيانة والتطوير لاحقًا

تعريف دالة بسيطة في Bash

#!/bin/bash

say_hello() {
  echo "Hello from function"
}

say_hello

يمكنك تعريف الدالة قبل استدعائها داخل نفس السكربت.

تمرير Arguments إلى Functions

#!/bin/bash

greet_user() {
  echo "Hello $1"
}

greet_user "Ali"
greet_user "Sara"

داخل الدالة، $1 هو أول argument و$2 ثاني argument.

استخدام المتغيرات المحلية local

#!/bin/bash

set_name() {
  local NAME="Linux User"
  echo "Inside function: $NAME"
}

NAME="Global Name"
set_name
echo "Outside function: $NAME"

local يمنع تعارض المتغيرات بين الدوال وباقي السكربت.

قيمة الإرجاع: return vs echo

إرجاع حالة نجاح/فشل عبر return:

check_file() {
  if [ -f "$1" ]; then
    return 0
  else
    return 1
  fi
}

check_file "/etc/passwd"
echo "Exit code: $?"

إرجاع قيمة نصية عبر echo:

get_date() {
  echo "$(date +%F)"
}

TODAY=$(get_date)
echo "Today is $TODAY"

دالة مع منطق شرطي وتكرار

process_users() {
  for USER in "$@"; do
    if [ -n "$USER" ]; then
      echo "Processing: $USER"
    fi
  done
}

process_users ali sara omar

"$@" يمرر كل arguments للدالة بشكل صحيح.

تنظيم سكربت حقيقي باستخدام Functions

#!/bin/bash

log_info() {
  echo "[INFO] $1"
}

backup() {
  log_info "Start backup..."
  tar -czf /tmp/backup.tar.gz /etc 2>/dev/null
  log_info "Backup done."
}

main() {
  log_info "Script started"
  backup
  log_info "Script finished"
}

main
النمط الفائدة
log_info() توحيد رسائل السجل
main() نقطة دخول واضحة للسكربت
نصيحة: كل كتلة منطق تتكرر مرتين أو أكثر، حوّلها إلى Function.

أخطاء شائعة عند استخدام Functions في Bash

  • نسيان تعريف الدالة قبل الاستدعاء في بعض البنى
  • عدم استخدام local مما يسبب تعارض متغيرات
  • الخلط بين return code والقيم النصية
  • عدم اقتباس المتغيرات "$1" عند الحاجة

تمرين عملي: دالة فحص ملف

#!/bin/bash

check_path() {
  if [ -e "$1" ]; then
    echo "Exists: $1"
  else
    echo "Missing: $1"
  fi
}

check_path "/etc/passwd"
check_path "/tmp/not-found"

إذا أعطت الدالة نتيجة صحيحة لكل مسار، فقد أتقنت أساس Functions في Bash.

FAQ: أسئلة شائعة حول Bash Functions

ما فائدة Functions في Bash؟

تساعدك على إعادة استخدام الكود وتقسيم السكربت إلى أجزاء واضحة وسهلة الصيانة.

كيف أمرر arguments إلى دالة في Bash؟

تمرر القيم عند استدعاء الدالة وتقرأها داخلها عبر $1 و$2 وغيرها مثل السكربت الرئيسي.

كيف ترجع الدالة قيمة في Bash؟

يمكنها إرجاع status code عبر return، أو طباعة قيمة عبر echo ثم التقاطها command substitution.

الخطوة التالية

في الدرس القادم سنتعلم التعامل مع الملفات داخل سكربتات Bash.

التالي: Bash File Ops
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن