English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

وظائف شيل

اللينكس شيل يمكن للمستخدم تعريف الوظائف، ثم يمكن استدعاء الوظائف في سكربت الشيل بسهولة.

تنسيق تعريف الدوال في shell كالتالي:}

[function] funname [()]
{
    action;
    [return int;]
}

شرح:

  • 1- يمكن استخدام تعريف دالة بـ function fun() أو تعريفها مباشرة بـ fun() بدون أي معاملات.

  • 2- يمكن عرض الحاصل على العودة باستخدام return، وإذا لم يكن هناك return، سيتم استخدام نتائج آخر أمر كقيمة العودة. يمكن أن يتبع return عددًا n (0-255)

في هذا المثال، يتم تعريف الدالة واستدعاؤها:

#!/bin/bash
# author:موقع التعليم الأساسي
# url:ar.oldtoolbag.com
demoFun(){
    echo "هذه هي الدالة الاولى الخاصة بي في shell!"
}
echo "-----بدء تنفيذ الدالة-----"
demoFun
echo "-----انتهاء تنفيذ الدالة-----"

نتيجة الإخراج:

-----بدء تنفيذ الدالة-----
هذه هي دالة shell الخاصة بي الاولى!
-----انتهاء تنفيذ الدالة-----

تعريف دالة تحتوي على جملة return:

#!/bin/bash
# author:موقع التعليم الأساسي
# url:ar.oldtoolbag.com
funWithReturn(){
    echo "سيقوم هذا الدالة بجمع العددين المدخلين..."
    echo "ادخل العدد الاول: "
    read aNum
    echo "ادخل العدد الثاني: "
    read anotherNum
    echo "الاعدادان هما $aNum و $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "مجموع العددين المدخلين هو $? !"

الخروج سيكون مثل الآتي:

سيقوم هذا الدالة بجمع العددين المدخلين...
ادخل العدد الاول: 
1
ادخل العدد الثاني: 
2
الاعدادان هما 1 و 2 !
مجموع العددين المدخلين هو 3 !

يمكن الحصول على قيمة العودة للدالة بعد استدعائها باستخدام $?.

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

معاملات الدالة

في Shell، يمكن تقديم معاملات إلى الدالة أثناء استدعائها. يمكن الحصول على قيمة المعاملات داخل جسم الدالة باستخدام形式 $n، مثل، $1 يمثل المعامل الاول، $2 يمثل المعامل الثاني...

مثال على دالة بمعاملات:

#!/bin/bash
# author:موقع التعليم الأساسي
# url:ar.oldtoolbag.com
funWithParam(){
    echo "الارتباط الاول هو $1 !"
    echo "المعلمة الثانية هي $2 !"
    echo "المعلمة العاشرة هي $10 !"
    echo "المعلمة العاشرة هي ${10} !"
    echo "المعلمة الحادية عشرة هي ${11} !"
    echo "عدد المعلمات الإجمالية هو $# !"
    echo "كإخراج سلسلة من جميع المعلمات $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

نتيجة الإخراج:

المعلمة الأولى هي 1!
المعلمة الثانية هي 2!
المعلمة العاشرة هي 10!
المعلمة العاشرة هي 34!
المعلمة الحادية عشرة هي 73!
عدد المعلمات الإجمالية هو 11!
كإخراج سلسلة من جميع المعلمات 1 2 3 4 5 6 7 8 9 34 73 !

ملاحظة، $10 لا يمكنه الحصول على العاشر معلمة، للحصول على العاشر معلمة يجب استخدام ${10}، عند n>=10 يجب استخدام ${n} للحصول على المعلمة.

إضافة إلى ذلك، هناك بعض الحروف الخاصة تستخدم لمعالجة المعلمات:

معالجة المعلمات شرح
$# عدد المعلمات المقدمة إلى السكربت أو الوظيفة
$* عرض جميع المعلمات المقدمة إلى السكربت كسلسلة واحدة
$$ رقم معرف عملية تشغيل السكربت الحالية
$! رقم معرف آخر عملية تشغيل في الخلفية
$@ مثل $*، ولكن عند استخدامه يضاف إلى كل معلمة بين أقواس مزدوجة، ويتم إرجاع كل معلمة داخل الأقواس.
$- عرض الخيارات الحالية لشيل، وهو نفس وظيفة أمر set.
$? عرض حالة الخروج الأخيرة للأمر. 0 يعني عدم وجود أخطاء، أي قيمة أخرى تشير إلى وجود أخطاء.