هاكيفاش تدفع لشركة بيم باش تخدم براتب 3200 درهم والعمل 8 ساعات يوميا
جدول المحتويات:
تعد وظيفة Bash أساسًا مجموعة من الأوامر التي يمكن استدعاؤها عدة مرات. الغرض من الوظيفة هو مساعدتك في جعل نصوص bash أكثر قابلية للقراءة وتجنب كتابة نفس الكود مرارًا وتكرارًا.
بالمقارنة مع معظم لغات البرمجة ، فإن وظائف Bash محدودة إلى حد ما. في هذا البرنامج التعليمي ، سنغطي أساسيات وظائف Bash وسنريك كيفية استخدامها في البرامج النصية الخاصة بك.
بيان وظيفة باش
بناء جملة التصريح عن وظيفة bash بسيط للغاية. يمكن الإعلان عنها بتنسيقين مختلفين:
-
يبدأ التنسيق الأول باسم الوظيفة ، متبوعًا بالأقواس. هذا هو التنسيق المفضل والأكثر استخدامًا.
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
ينهي الوظيفة. يمكنك التفكير في الأمر على أنه حالة خروج الوظيفة.
#!/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
كما هو موضح أدناه:
#!/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"
استنتاج
وظيفة Bash هي كتلة من التعليمات البرمجية القابلة لإعادة الاستخدام المصممة لتنفيذ عملية معينة. بمجرد التعريف ، يمكن استدعاء الوظيفة عدة مرات داخل البرنامج النصي.
قد ترغب أيضًا في قراءة كيفية استخدام دالة Bash لإنشاء أمر اختصار لا يُنسى لأمر أطول.
محطة باشصفائف باش
المصفوفات هي واحدة من هياكل البيانات الأكثر استخدامًا والأساسية. في هذه المقالة ، سنقوم بتغطية صفائف Bash ، وشرح كيفية استخدامها في البرامج النصية Bash.
باش للحلقة
هناك 3 تصميمات حلقة أساسية في البرمجة النصية Bash ، للحلقة ، أثناء الحلقة ، وحتى الحلقة. في هذا البرنامج التعليمي ، سنغطي أساسيات الحلقات في Bash بالإضافة إلى استراحة واستمرار البيانات لتغيير تدفق الحلقة.
باش: إلحاق الملف
في Linux ، هناك طرق متعددة لإلحاق النص بملف. يشرح هذا المقال البعض منهم.







