خصم ٥٠٪ على جميع الخطط، لفترة محدودة. يبدأ من $2.48/mo
١١ دقيقة متبقية
الخوادم ونظام التشغيل

دوال Bash شرح مفصل: البنية والأمثلة وحالات الاستخدام

كيلي واتسون By كيلي واتسون ١١ دقيقة قراءة تحديث ١٤ ديسمبر ٢٠٢٥
رسم ثلاثي الأبعاد لكتل كود متوهجة باللون الأزرق تتجمع لتشكّل بنية معيارية، تمثيلاً لدوال Bash

تجمع الدوال في Bash الأوامر ذات الصلة تحت اسم واحد. عند استدعاء هذا الاسم، يُنفَّذ الكتلة البرمجية بأكملها. يمكنك تمرير وسيطات لتخصيص السلوك، وإرجاع قيم لنقل النتائج. هذا يُبقي كودك منظماً وسهل الصيانة.

يهيمن Linux على بيئات الخوادم في جميع أنحاء العالم، لذا بات إتقان دوال Bash أمراً ضرورياً أكثر من أي وقت مضى. الدوال تحوّل السكريبتات الفوضوية إلى أتمتة منظمة وقابلة لإعادة الاستخدام.

يأخذك هذا الدليل من البنية الأساسية إلى حالات الاستخدام المتقدمة. ستتعلم كيفية تعريف الدوال، وتمرير المعاملات، والتعامل مع القيم المُرجَعة، مع عشرة أمثلة عملية يمكنك توظيفها مباشرةً في سكريبتاتك.

ملخص سريع

  • دوال Bash هي كتل برمجية مُسمَّاة يمكنك إعادة استخدامها في أي مكان من سكريبتاتك
  • عرّف الدوال باستخدام function_name() { commands; } البنية
  • مرّر الوسيطات باستخدام $1, $2, $3 المعاملات الموضعية
  • الدوال تُحسّن قابلية قراءة الكود وتنظيمه وسهولة صيانته
  • استخدم return للخروج من الدوال وإرسال رموز الحالة (0 = نجاح، أي قيمة أخرى = فشل)
  • يمكن مشاركة الدوال بين السكريبتات باستخدام source or export -f
  • تشمل الأمثلة العملية: النسخ الاحتياطي للملفات، ومراقبة القرص، والتحقق من صحة المدخلات، والتحقق من حالة الخدمات

ما هو Bash Scripting؟

رسم ثلاثي الأبعاد لدرج رقمي متوهج تكتب عليه أوامر Bash تلقائياً، يمثّل أتمتة سكريبتات Bash.

Bash scripting هو أسلوب لأتمتة المهام باستخدام Bash shell. يُعدّ الواجهة الافتراضية لسطر الأوامر في Linux، ولا يزال أداةً معيارية على macOS. سكريبت Bash هو برنامج مكتوب بلغة Bash scripting، يمكن تشغيله عبر الطرفية أو كملف سكريبت مستقل.

مع استخدام Linux على أجهزة سطح المكتب في تصاعد مستمر وهيمنة نظام التشغيل على بيئات الخوادم في جميع أنحاء العالم، باتت مهارات Bash scripting ذات قيمة حقيقية لمحترفي تقنية المعلومات. تتكامل اللغة بشكل جيد مع أدوات DevOps مثل Docker وKubernetes وخطوط CI/CD.

يتيح لك Bash scripting تنفيذ مهام تتراوح بين الأوامر البسيطة والأتمتة المعقدة وإدارة الأنظمة. يمكنك أتمتة المهام المتكررة، وكتابة سكريبتات الصيانة، وبناء خطوط النشر، وإدارة أنظمة البرمجيات، ومعالجة البيانات.

ما هي دالة Bash؟

رسم توضيحي رقمي مستقبلي يُظهر بيانات سطر أوامر مبعثرة يُنظمها بوابة معالجة متوهجة، ترمز إلى آلية عمل دالة Bash، مع مساحة فارغة على اليسار.

دالة Bash هي مجموعة من الأوامر تُعرَّف إما داخل سكريبت Bash أو بشكل تفاعلي عند موجه الأوامر، وذلك حسب حالة الاستخدام. بمجرد تعريفها، يمكن استدعاء دالة Bash عدة مرات داخل السكريبت أو في سكريبتات أخرى، تمامًا كأي أمر shell عادي.

تتيح لك دوال Bash إنشاء كتل كود قابلة لإعادة الاستخدام، قادرة على تنفيذ عمليات معقدة وتنظيم الكود وتبسيط السكريبتات. يمكنك تمرير وسيطات إلى دالة Bash ثم استخدامها داخلها لتنفيذ العمليات. كما تُعيد دوال Bash قيمًا يمكنك توظيفها في أجزاء أخرى من السكريبت.

سنتناول عدة أساليب تطبيق محددة، منها simple_function للمنطق الأساسي، simple_inputs لمعالجة الوسيطات، وهياكل متقدمة مثل fibonnaci_recursion.

أساسيات دوال Bash ضرورية لكل مسؤول نظام أو مهندس DevOps يعمل مع الأتمتة. تتناول الأقسام التالية كل نوع من هذه الأنواع بالتفصيل.

لماذا نستخدم دوال Bash؟

ترس أزرق متوهج يحمل رموز التحسين ويُشغّل آلة كود، يمثل الكفاءة والسرعة المكتسبة باستخدام دوال Bash.

بعد أن تعرفنا على مفهوم دوال Bash، لنستعرض أبرز مزاياها. يساعدك هذا القسم على فهم الحالات التي تُبرز فيها الدوال أكبر قيمة.

إعادة الاستخدام

حين تكتب دالة Bash، تحصل على أداة فعّالة يمكنك توظيفها أكثر من مرة داخل السكريبت أو حتى في سكريبتات أخرى.

هذا يجعل الكود أكثر كفاءة ويوفر الوقت بالتخلص من التكرار. كما يصبح صيانة الكود أيسر، إذ يكفيك تعديل الدالة في مكان واحد فقط.

سهولة القراءة

قد يصعب فهم السكريبتات المعقدة. تحل دوال Bash هذه المشكلة بتقسيم السكريبت إلى أجزاء أصغر وأسهل في الإدارة.

تؤدي كل دالة غرضًا محددًا، ويعكس اسمها الوصفي دورها بوضوح. هذا يجعل فهم الكود وصيانته أسهل لك وللآخرين.

النمطية

تُنظّم الدوال بنية الكود. يمكنك تقسيم المنطق إلى وحدات أصغر، مما يُبقي هيكل السكريبت واضحًا وسهل الإدارة.

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

معاملات دوال Bash

يمكنك تمرير وسيطات، أو معاملات، إلى دوالك. تتيح هذه الوسيطات لدوالك التكيّف وتنفيذ إجراءات مختلفة بناءً على المدخلات التي تتلقاها.

يفتح هذا إمكانيات واسعة مع جعل دوالك أكثر مرونة وقابلية للتكيّف. بدلاً من كتابة كود متشابه مرات عدة، تكتب دالة واحدة تتعامل مع مدخلات مختلفة.

كيف ومتى تستخدم دوال Bash؟

مخطط انسيابي ثلاثي الأبعاد يُظهر تفرّع تنفيذ السكريبت إلى كتلة دالة ثم العودة منها، مما يوضّح كيفية استخدام دوال Bash في منطق التنفيذ.

لنتناول الأمر بشكل أكثر تقنية ونبدأ بمثال قصير يوضح كيفية إنشاء دوال Bash. يمكن استخدام الصياغة التالية في البيئات المبنية على Unix. إن كنت تعمل على Windows، يمكنك تثبيت Linux Bash على Windows 10 لمتابعة هذه الأمثلة.

إنشاء دالة Bash

ابدأ باستخدام بنية الأمر التالية:

function_name () {

    # الأوامر تذهب هنا

}

 

بمجرد إنشاء الدالة، يمكنك استخدامها في كودك في أي وقت. إليك مثالاً عملياً:

greet () {

    echo "Hello, $1!"

}

 

استدعِ هذه الدالة بـ مرحبا بالعالم للحصول على المخرج "Hello, World!" ويمثّل $1 الوسيط الأول الممرَّر إلى الدالة.

إليك بعض الأمثلة العملية الإضافية التي يمكنك استخدامها في سكريبتاتك الخاصة:

# إنشاء نسخة احتياطية من أي ملف

backup_file () {

    cp "$1" "$1.bak"

    echo "Backup created: $1.bak"

}

 

# Check if a directory exists, create if it doesn't

ensure_dir () {

    if [ ! -d "$1" ]; then

        mkdir -p "$1"

        echo "Created directory: $1"

    fi

}

 

# تسجيل الرسائل مع الطوابع الزمنية

log_message () {

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"

}

 

تُعرِّف هذه الدوال المخصصة في Bash مرةً واحدة، ثم تستدعيها في أي مكان تحتاجها داخل السكريبت.

أساسيات صياغة الدوال

تعمل الدوال كسكريبتات مصغّرة داخل السكريبت الرئيسي، لكنها تشترك في ذاكرة الـ shell. ضع هذه السلوكيات الثلاث في اعتبارك عند كتابتها.

نطاق المتغيرات (محلي مقابل عام)

المتغيرات داخل الدوال عامة بشكل افتراضي. إذا عرّفت my_var="test" داخل دالة، فسيتجاوز أي قيمة موجودة مسبقاً للمتغير my_var في سكريبتك. استخدم دائماً local لحصر المتغيرات داخل الدالة وتجنّب الآثار الجانبية:

local my_var="value"

المعاملات الموضعية

تقرأ الدوال الوسائط باستخدام نفس متغيرات $1, $2، و $@ المستخدمة في السكريبتات. هذه المتغيرات محلية للدالة وتُعاد تهيئتها عند خروجها. وسائط السكريبت الأصلية غير متاحة داخل الدالة ما لم تمرّرها إليها صراحةً.

القيم المُعادة

دوال Bash لا تُعيد بيانات كما هو الحال في دوال Python أو Java. الأمر return يضبط فقط حالة الخروج (0-255) للإشارة إلى النجاح أو الفشل. لإعادة بيانات فعلية (كنص أو نتيجة حساب)، echo النتيجة والتقاطها عند استدعاء الدالة:

result=$(my_function)

أفضل ١٠ أمثلة عملية لدوال Bash

بعد أن تعرّفت على دوال Bash وكيفية إنشائها، إليك عشرة أمثلة عملية يمكنك إضافتها إلى سكريبتاتك. كل دالة تحل مشكلة شائعة وتوضح البنية الصحيحة للدوال، وطريقة تمرير المعاملات، وإرجاع القيم.

١. دالة النسخ الاحتياطي للملفات

تنشئ نسخة احتياطية مختومة بالتاريخ والوقت لأي ملف:

backup_file () {

    local file="$1"

    local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"

    

    if [ -f "$file" ]; then

        cp "$file" "$backup"

        echo "Backup created: $backup"

        return 0

    else

        echo "Error: File not found"

        return 1

    fi

}

 

الاستخدام: backup_file /etc/nginx/nginx.conf

٢. أداة التحقق من المجلدات

تتحقق من وجود مجلد معين، وتنشئه تلقائيًا إن لم يكن موجودًا:

ensure_dir () {

    local dir="$1"

    

    if [ ! -d "$dir" ]; then

        mkdir -p "$dir"

        echo "Created: $dir"

    fi

}

 

الاستخدام: ensure_dir /var/log/myapp

3. مسجّل الطوابع الزمنية

يضيف طوابع زمنية إلى رسائل السجل لأغراض تصحيح الأخطاء:

log_message () {

    local level="$1"

    local message="$2"

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"

}

 

الاستخدام: log_message "INFO" "Script started"

4. مراقب مساحة القرص

يفحص استخدام القرص ويُنبّه إذا تجاوز حدًا معيّنًا:

check_disk_space () {

    local threshold="${1:-80}"

    local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

    

    if [ "$usage" -gt "$threshold" ]; then

        echo "Warning: Disk usage at ${usage}%"

        return 1

    fi

    return 0

}

 

الاستخدام: check_disk_space 90

5. مدقّق المدخلات

يتحقق من أن مدخل المستخدم ليس فارغًا:

validate_input () {

    local input="$1"

    local name="$2"

    

    if [ -z "$input" ]; then

        echo "Error: $name cannot be empty"

        return 1

    fi

    return 0

}

 

الاستخدام: validate_input "$username" "Username"

6. فاحص حالة الخدمة

يفحص ما إذا كانت الخدمة تعمل ويُبلّغ عن حالتها:

check_service () {

    local service="$1"

    

    if systemctl is-active --quiet "$service"; then

        echo "$service يعمل"

        return 0

    else

        echo "$service لا يعمل"

        return 1

    fi

}

 

الاستخدام: check_service nginx

٧. مستخرج امتداد الملف

يستخرج الامتداد من اسم الملف:

get_extension () {

    local filename="$1"

    echo "${filename##*.}"

}

 

الاستخدام: ext=$(get_extension "document.pdf")

٨. أداة تنظيف النصوص

تزيل المسافات الزائدة من بداية النص ونهايته:

trim_string () {

    local str="$1"

    str="${str#"${str%%[![:space:]]*}"}"

    str="${str%"${str##*[![:space:]]}"}"

    echo "$str"

}

 

الاستخدام: clean=$(trim_string " hello world ")

٩. أداة الأرشفة الآمنة للملفات

تنقل الملف إلى مجلد $HOME/.trash بدلاً من حذفه نهائياً. تُضاف لحظة زمنية إلى اسم الملف لتفادي الكتابة فوق النسخ الاحتياطية السابقة.

safe_remove() {

    local file="$1"

    local trash="$HOME/.trash"

    # أضف طابعاً زمنياً لتجنب الكتابة فوق الملفات الموجودة

    local new_name="$(basename "$file")_$(date +%s)"

    

    mkdir -p "$trash"

 

    if [ -e "$file" ]; then

        mv "$file" "$trash/$new_name"

        echo "تم الأرشفة: $file -> $trash/$new_name"

    else

        echo "خطأ: $file غير موجود"

        return 1

    fi

}

 

الاستخدام: safe_remove old_script.sh

 

١٠. مُقدِّم الحالة

يوضح آلية إرجاع القيم في دوال Bash للتعامل مع الأخطاء. تُشير قيمة الإرجاع في دالة Bash إلى النجاح (0) أو الفشل (قيمة غير صفرية):

process_data () {

    local file="$1"

    

    if [ ! -f "$file" ]; then

        return 1

    fi

    

    # معالجة الملف

    cat "$file" | wc -l

    return 0

}

 

# التحقق من قيمة الإرجاع

process_data "data.txt"

if [ $? -eq 0 ]; then

    echo "اكتملت المعالجة"

else

    echo "فشلت المعالجة"

fi

 

الـ $? يحتفظ المتغير بحالة الخروج من آخر أمر أو استدعاء دالة.

الدالة الغرض الميزة الرئيسية
backup_file إنشاء نسخ احتياطية للملفات تسمية مختومة بالوقت
ensure_dir إدارة الدلائل ينشئ تلقائياً عند الغياب
log_message التسجيل بادئة الطابع الزمني
check_disk_space مراقبة النظام تنبيهات العتبة
validate_input التحقق من المدخلات التحقق من النص الفارغ
check_service مراقبة الخدمات تكامل Systemd
get_extension تحليل النصوص توسيع المعاملات
trim_string تنظيف النصوص إزالة المسافات الزائدة
safe_remove الحذف الآمن دليل المهملات
process_data معالجة الأخطاء قيم الإرجاع

تشغيل دوال Bash على VPS

تبلغ دوال Bash أقصى إمكاناتها عند تشغيلها في بيئة خادم مخصص. يمنحك Linux VPS وصولاً كاملاً بصلاحيات الجذر لتخصيص بيئة الصدفة، وإنشاء مكتبات دوال على مستوى النظام، وأتمتة مهام إدارة الخادم دون أي قيود.

مع VPS، يمكنك تخزين الدوال القابلة لإعادة الاستخدام في /etc/profile.d/ لجميع المستخدمين، وجدولة السكريبتات المبنية على الدوال عبر مهام cron، وبناء خطوط أتمتة للنشر والصيانة. نوفر خوادم في ١٢ موقعاً حول العالم بسرعات شبكة تصل إلى 40 Gbps وذاكرة DDR5، مما يعني تنفيذاً أسرع للسكريبتات ومعالجة أكثر سلاسة للبيانات.

هذا المستوى من التحكم يجعل VPS الخيار الأمثل لكل من يأخذ برمجة الصدفة وأتمتة الأنظمة على محمل الجد.

خلاصة

تُعدّ دوال Bash ركيزة أساسية لكتابة سكريبتات معيارية وقابلة لإعادة الاستخدام. إذ تتيح لك تجميع الأوامر ذات الصلة معاً وتغليف المنطق المعقد، مما يجعل الكود أسهل في القراءة والصيانة. سواء كنت تدير بنية سحابية، أو تؤتمت خطوط نشر، أو تتولى مهام إدارة النظام الروتينية، فإن الدوال تساعدك على إبقاء سكريبتاتك منظمة وفعّالة.

في هذا المقال، تناولنا أساسيات دوال Bash، من تعريفها واستدعائها، إلى عشرة أمثلة عملية وحالات استخدام شائعة، لمساعدتك على الانطلاق في مشاريع الأتمتة الخاصة بك.

بدمجها مع هياكل التحكم مثل جملة if في Bash، توفر الدوال اللبنات الأساسية لأتمتة قوية. باستخدام دوال Bash في سكريبتاتك، يمكنك كتابة كود أنظف وأكثر تنظيماً، يسهل فهمه وصيانته.

الأسئلة الشائعة

هل يمكن لدوال Bash استخدام متغيرات محلية؟

نعم. يمكن لدوال Bash استخدام متغيرات محلية بالكلمة المفتاحية local، التي تحصر نطاق المتغير داخل الدالة وتمنعه من التأثير على المتغيرات التي تحمل الاسم ذاته خارجها.

هل يمكن لدوال Bash أن تكون تكرارية؟

نعم، تدعم دوال Bash الاستدعاء التكراري. غير أن Bash تمتلك حجماً افتراضياً محدوداً نسبياً لمكدس الاستدعاء، لذا بحسب الدوال التكرارية التي تنوي استخدامها، قد تحتاج إلى زيادته باستخدام الأمر ulimit -s قبل التنفيذ.

هل يمكنني استخدام دوال Bash في سكريبتات أخرى؟

نعم، يمكنك مشاركة دوال Bash بين السكريبتات باستخدام الأمر source أو اختصاره (.). باستدعاء ملف يحتوي على تعريفات الدوال، تصبح تلك الدوال متاحة في السكريبت الذي استدعاها. أما للعمليات الفرعية، فاستخدم export -f function_name لجعل الدالة في متناولها.

هل يمكنني استخدام دوال Bash في خطوط الأنابيب؟

نعم، لكن ذلك يستلزم خطوات محددة عند التعامل مع الأوامر الخارجية. داخل السكريبت، يمكنك توجيه البيانات مباشرة إلى دالة (مثلاً: cat file | my_function). إلا أن الأوامر مثل xargs أو find -exec تعمل في بيئة جديدة، فلاستخدام دالة معها يجب تصديرها (export -f my_func) ثم استدعاء Bash صراحةً (مثلاً: xargs bash -c 'my_func "$@"').

ما هي دالة سكريبت الصدفة؟

دالة سكريبت الصدفة هي كتلة كود محددة داخل السكريبت تؤدي غرضاً بعينه، ويمكن استدعاؤها من أجزاء مختلفة منه. تتميز الدوال بقيمتها الكبيرة من حيث تنظيم الكود وإعادة استخدامه وسهولة صيانته. وفي سياق برمجة Bash، تكون الدوال مغلّفة ضمن السكريبت الكلي.

مشاركة

المزيد من المدونة

تابع القراءة.

صورة غلاف أفضل التطبيقات ذاتية الاستضافة التي يمكن تشغيلها مع Cosmos Cloud مع لوحات التطبيقات حول لوحة تحكم Cosmos.
الخوادم ونظام التشغيل

أفضل التطبيقات ذاتية الاستضافة التي يمكن تشغيلها مع Cosmos Cloud: الملفات والوسائط وكلمات المرور والأتمتة والمزيد!

Maybe قمت بإعداد Cosmos Cloud وتريد الآن معرفة التطبيقات التي تتناسب معه، أو ربما لم تحسم قرارك بشأن Cosmos بعد وتريد فقط معرفة مدى ملاءمته لسير عملك

نيك سيلفرنيك سيلفر قراءة في ١٦ دقيقة
غلاف مقارنة Portainer مقابل Cosmos Cloud لإدارة تطبيقات Docker مع مخطط إعداد هجين وكتل neon ops و access.
الخوادم ونظام التشغيل

Portainer مقابل Cosmos Cloud: الأنسب لإدارة تطبيقات Docker

إذا كنت تعرف Docker وتريد الطريقة الأنظم لتشغيل مجموعة تطبيقات متنامية، فهذه الإجابة المختصرة في المقارنة بين Portainer و Cosmos Cloud. Portainer هو الخيار الأقوى لـ

نيك سيلفرنيك سيلفر ١٤ دقيقة قراءة
رسم توضيحي لمقارنة Cosmos Cloud مقابل CasaOS مقابل Umbrel يُظهر ثلاثة مسارات ذاتية الاستضافة داخل عالم شبكة سحابية مجردة.
الخوادم ونظام التشغيل

Cosmos Cloud مقابل CasaOS مقابل Umbrel: أي منصة ذاتية الاستضافة تناسب إعدادك؟

الإجابة المختصرة هي أن CasaOS لا يزال الأسهل للبدء به، و Umbrel يتميز بأنظف تجربة منسّقة، بينما Cosmos Cloud يصبح الخيار الأمثل حين تريد تحكمًا أدق في

نيك سيلفرنيك سيلفر ١١ دقيقة قراءة

هل أنت مستعد للنشر؟ يبدأ من ٢٫٤٨ دولار/شهر.

سحابة مستقلة منذ ٢٠٠٨. AMD EPYC، NVMe، 40 Gbps. ضمان استرداد المبلغ لمدة ١٤ يومًا.