ذكري المظهر

وظائف باش

هاكيفاش تدفع لشركة بيم باش تخدم براتب 3200 درهم والعمل 8 ساعات يوميا

هاكيفاش تدفع لشركة بيم باش تخدم براتب 3200 درهم والعمل 8 ساعات يوميا

جدول المحتويات:

Anonim

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

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

بيان وظيفة باش

بناء جملة التصريح عن وظيفة bash بسيط للغاية. يمكن الإعلان عنها بتنسيقين مختلفين:

  1. يبدأ التنسيق الأول باسم الوظيفة ، متبوعًا بالأقواس. هذا هو التنسيق المفضل والأكثر استخدامًا.

    function_name () { commands }

    نسخة سطر واحد:

    function_name () { commands; }

    يبدأ التنسيق الثاني بالكلمة المحجوزة function متبوعة باسم الوظيفة.

    function function_name { commands }

    نسخة سطر واحد:

    function function_name { commands; }

بعض النقاط التي يجب ملاحظتها:

  • قائمة الأوامر بين الأقواس المتعرجة {} هي نص الدالة. يجب فصل الأقواس المتعرجة التي تحيط بجسم الوظيفة عن الجسم بمسافات أو خطوط جديدة. لا يؤدي تحديد الوظيفة إلى تنفيذها. لاستدعاء وظيفة bash ، ما عليك سوى استخدام اسم الوظيفة. يتم تنفيذ الأوامر بين الأقواس المتعرجة عندما يتم استدعاء الوظيفة في البرنامج النصي shell. يجب وضع تعريف الوظيفة قبل أي مكالمات إلى الوظيفة. عند استخدام وظائف "مضغوطة" ذات سطر واحد ، فاصلة منقوطة ; يجب أن تتبع آخر أمر في الوظيفة. يجب أن تحاول دائمًا الاحتفاظ بأوصافك الوظيفية وصفية.

لفهم ذلك بشكل أفضل ، ألقِ نظرة على المثال التالي:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

دعنا نحلل الشفرة سطرا:

  • في السطر 3 نقوم بتعريف الوظيفة عن طريق إعطاء اسم لها ، وفتح الدعامة المتعرجة { التي تمثل بداية جسم الوظيفة.الخط 4 هو جسم الوظيفة. يمكن أن يحتوي نص الدالة على العديد من الأوامر والإعلانات المتغيرة. يحدد السطر 5 ، قوس الإغلاق المجعد } ، نهاية الدالة hello_world السطر 7 نقوم بتنفيذ الوظيفة. يمكنك تنفيذ الوظيفة عدة مرات حسب حاجتك.

إذا قمت بتشغيل البرنامج النصي ، فسوف يقوم بطباعة hello, world .

نطاق المتغيرات

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

يمكن الإعلان عن المتغيرات المحلية داخل نص الوظيفة باستخدام الكلمة الأساسية local ويمكن استخدامها داخل هذه الوظيفة فقط. يمكن أن يكون لديك متغيرات محلية بنفس الاسم في وظائف مختلفة.

لتوضيح كيفية عمل نطاق المتغيرات بشكل أفضل في Bash ، دعنا نفكر في مثال:

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

يبدأ البرنامج النصي بتعريف اثنين من المتغيرات العامة var1 و var2 . ثم دالة تقوم بتعيين متغير محلي var1 وتعديل متغير var2 .

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

من الناتج أعلاه ، يمكننا أن نستنتج أن:

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

إرجاع القيم

على عكس الوظائف في لغات البرمجة "الحقيقية" ، فإن وظائف Bash لا تسمح لك بإرجاع قيمة عند الاتصال. عند اكتمال دالة bash ، تكون قيمة الإرجاع هي حالة البيان الأخير الذي تم تنفيذه في الوظيفة ، 0 للنجاح والرقم العشري غير الصفري في النطاق من 1 إلى 255 للفشل.

يمكن تحديد حالة الإرجاع باستخدام الكلمة الأساسية return ، ويتم تعيينها للمتغير $? . بيان return ينهي الوظيفة. يمكنك التفكير في الأمر على أنه حالة خروج الوظيفة.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

لإرجاع قيمة عشوائية من دالة ما ، نحتاج إلى استخدام طرق أخرى. أبسط خيار هو تعيين نتيجة الدالة إلى متغير عمومي:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

خيار آخر أفضل لإرجاع قيمة من دالة هو إرسال القيمة إلى stdout باستخدام echo أو printf كما هو موضح أدناه:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

بدلاً من مجرد تنفيذ الوظيفة التي ستطبع الرسالة إلى stdout ، فإننا func_result إخراج الوظيفة للمتغير func_result باستخدام استبدال أمر $() . يمكن استخدام المتغير لاحقًا حسب الحاجة.

تمرير الحجج إلى وظائف باش

لتمرير أي عدد من الوسائط إلى دالة bash ، ضعها ببساطة بعد اسم الوظيفة ، مفصولة بمسافة. إنها ممارسة جيدة أن نقتبس نقلاً مزدوجًا بين الوسيطات لتجنب إساءة تسمية الوسيطة مع وجود مسافات فيها.

  • المعلمات التي تم تمريرها هي $1 ، $2 ، $3 $n ، تقابل موضع المعلمة بعد اسم الوظيفة.المتغير $0 محجوز لاسم الوظيفة.المتغير $# يحمل عدد المعلمات الموضعية / الوسائط التي تم تمريرها إلى function.The $* و $@ متغيرات تحتفظ بجميع المعلمات الموضعية / الوسائط التي تم تمريرها إلى الوظيفة.
    • عندما تتضاعف ونقلت ، "$*" يتوسع إلى سلسلة واحدة مفصولة بمسافة (الحرف الأول من IFS) - "$1 $2 $n" . عندما يتضاعف نقلت ، "$@" يتوسع إلى سلاسل منفصلة - "$1" "$2" "$n" . عندما لا تكون علامات الاقتباس مزدوجة ، يكون $* و $@ متماثلين.

هنا مثال:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

استنتاج

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

قد ترغب أيضًا في قراءة كيفية استخدام دالة Bash لإنشاء أمر اختصار لا يُنسى لأمر أطول.

محطة باش