logo

وظائف باش

لقد أوضحنا في هذا الموضوع أساسيات وظائف bash وكيفية عملها في البرمجة النصية bash shell.

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

فيما يلي بعض النقاط الأساسية حول وظائف bash:

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

بناء الجملة

يمكن تعريف صيغة الإعلان عن دالة bash بتنسيقين:

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

 function_name () { commands } 

يمكن ذكر إصدار السطر الواحد على النحو التالي:

 function_name () { commands; } 

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

 function function_name { commands } 

يمكن ذكر إصدار السطر الواحد على النحو التالي:

 function function_name { commands; } 

بالمقارنة مع معظم لغات البرمجة، فإن وظائف Bash محدودة إلى حد ما. دعونا نفهم هذا المفهوم بمساعدة بعض الأمثلة:

مثال: الطريقة الأولى

 #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

انتاج |

 Welcome to Javatpoint. 

مثال: الطريقة الثانية

 #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

انتاج |

 Welcome to Javatpoint. 

تمرير الحجج

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

ج

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

فيما يلي بعض النقاط الأساسية حول تمرير الوسائط إلى وظائف bash:

  • يتم الوصول إلى الوسائط المحددة كـ ، ، ... $n، بما يتوافق مع موضع الوسائط بعد اسم الوظيفة.
  • يتم الاحتفاظ بالمتغير

    لقد أوضحنا في هذا الموضوع أساسيات وظائف bash وكيفية عملها في البرمجة النصية bash shell.

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

    فيما يلي بعض النقاط الأساسية حول وظائف bash:

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

    بناء الجملة

    يمكن تعريف صيغة الإعلان عن دالة bash بتنسيقين:

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

     function_name () { commands } 

    يمكن ذكر إصدار السطر الواحد على النحو التالي:

     function_name () { commands; } 

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

     function function_name { commands } 

    يمكن ذكر إصدار السطر الواحد على النحو التالي:

     function function_name { commands; } 

    بالمقارنة مع معظم لغات البرمجة، فإن وظائف Bash محدودة إلى حد ما. دعونا نفهم هذا المفهوم بمساعدة بعض الأمثلة:

    مثال: الطريقة الأولى

     #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

    انتاج |

     Welcome to Javatpoint. 

    مثال: الطريقة الثانية

     #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

    انتاج |

     Welcome to Javatpoint. 

    تمرير الحجج

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

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

    فيما يلي بعض النقاط الأساسية حول تمرير الوسائط إلى وظائف bash:

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

    فيما يلي الكود الذي يوضح الإجراء الخاص بكيفية تمرير الوسائط إلى الوظائف والوصول إلى الوسائط داخل الوظيفة.

    سكريبت باش

     #!/bin/bash #Script to pass and access arguments function_arguments() { echo $1 echo $2 echo $3 echo $4 echo $5 } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

    انتاج |

    وظائف باش

    في هذا البرنامج النصي، أضفنا القيم 'نحن' و'مرحبًا' و'أنت' و'on' و'Javatpoint' بعد أن قمنا بتسمية الدالة function_arguments. يتم تمرير هذه القيم إلى function_arguments كمعلمات وتخزينها في متغير محلي. ومع ذلك، على عكس اللغات الأخرى، يقوم المترجم بتخزين القيم التي تم تمريرها في متغيرات محددة مسبقًا، والتي يتم تسميتها بعد ذلك وفقًا لتسلسل معلمات التمرير.

    على سبيل المثال،

    'نحن' يتم تخزين الكلمة في المتغير 1 .
    'مرحباً' يتم تخزين الكلمة في المتغير 2 .
    'أنت' يتم تخزين الكلمة في المتغير 3 .
    'على' يتم تخزين الكلمة في المتغير 4 .
    'جافات بوينت' يتم تخزين الكلمة في المتغير 5 .

    نطاق متغير

    يتم تعريف المتغيرات العامة على أنها المتغيرات التي يمكن الوصول إليها في أي مكان داخل البرنامج النصي بغض النظر عن النطاق. بشكل افتراضي، يتم تعريف كافة المتغيرات كمتغيرات عامة، حتى لو تم الإعلان عنها داخل الدالة. يمكننا أيضًا إنشاء متغيرات كمتغير محلي. يمكن الإعلان عن المتغيرات المحلية داخل نص الوظيفة باستخدام 'المحلية'؟ الكلمة الرئيسية عندما يتم تعيينها لأول مرة. لا يمكن الوصول إليها إلا داخل تلك الوظيفة. يمكننا إنشاء متغيرات محلية بنفس الاسم في وظائف مختلفة. لإضافة متغير محلي، يمكننا استخدام بناء الجملة التالي:

     local var_name= 

    لفهم كيفية عمل نطاق المتغيرات في Bash Scripting بشكل أفضل، راجع المثال التالي:

    سكريبت باش

     #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

    انتاج |

    وظائف باش

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

    إرجاع القيم

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

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

    على سبيل المثال، خذ بعين الاعتبار الكود التالي:

    سكريبت باش

     #!/bin/bash #Setting up a return status for a function print_it () { echo Hello $1 return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

    انتاج |

    وظائف باش

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

    سكريبت باش

     #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

    انتاج |

     Welcome to Javatpoint. 

    تجاوز الأوامر

    لدينا خيار لتجاوز أوامر bash عن طريق إنشاء دالة بنفس اسم الأمر الذي سنقوم بتجاوزه. على سبيل المثال، إذا أردنا تجاوز أمر 'echo'، فعلينا إنشاء دالة باسم 'echo'.

    قد يكون مفهوم تجاوز أوامر bash مفيدًا في بعض السيناريوهات، مثل عندما نريد استخدام أمر بخيارات محددة. وأيضًا عندما لا نرغب في تزويد الأمر بأكمله بخيارات عدة مرات داخل البرنامج النصي. في مثل هذه الحالات، يمكننا تجاوز أمر bash المدمج للأمر مع الخيارات. الآن دعونا نفهم مفهوم تجاوز الأوامر في Bash Shell Scripting بمساعدة بعض الأمثلة:

    مثال

    في هذا المثال، قمنا بتجاوز الأمر 'echo' وأضفنا الطابع الزمني في شكل الوسيطة إلى الأمر 'echo'.

    سكريبت باش

     #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo $1 } echo 'Welcome to Javatpoint.' 

    انتاج |

    وظائف باش

    خاتمة

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


    محجوزًا لاسم الوظيفة.
  • يتم استخدام المتغير $# للاحتفاظ بعدد الوسيطة/المعلمة الموضعية المعطاة للوظيفة.
  • يتم استخدام المتغيرين $* و$@ للاحتفاظ بجميع الوسائط/المعلمات المعطاة للوظيفة.
    • عندما يتم استخدام $* مع علامات الاقتباس المزدوجة (أي '$*' )، فإنها تتوسع إلى سلسلة واحدة مفصولة بمسافة. على سبيل المثال، ' $n إلخ'.
    • عندما يتم استخدام $@ مع علامات الاقتباس المزدوجة (أي '$@' )، فإنه يمتد إلى سلسلة منفصلة. على سبيل المثال، '' '' '$n' وما إلى ذلك.
    • عندما لا يتم استخدام $* و$# مع علامتي الاقتباس المزدوجتين، فإنهما متماثلتان.

فيما يلي الكود الذي يوضح الإجراء الخاص بكيفية تمرير الوسائط إلى الوظائف والوصول إلى الوسائط داخل الوظيفة.

سكريبت باش

 #!/bin/bash #Script to pass and access arguments function_arguments() { echo  echo  echo  echo  echo  } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

انتاج |

وظائف باش

في هذا البرنامج النصي، أضفنا القيم 'نحن' و'مرحبًا' و'أنت' و'on' و'Javatpoint' بعد أن قمنا بتسمية الدالة function_arguments. يتم تمرير هذه القيم إلى function_arguments كمعلمات وتخزينها في متغير محلي. ومع ذلك، على عكس اللغات الأخرى، يقوم المترجم بتخزين القيم التي تم تمريرها في متغيرات محددة مسبقًا، والتي يتم تسميتها بعد ذلك وفقًا لتسلسل معلمات التمرير.

على سبيل المثال،

'نحن' يتم تخزين الكلمة في المتغير 1 .
'مرحباً' يتم تخزين الكلمة في المتغير 2 .
'أنت' يتم تخزين الكلمة في المتغير 3 .
'على' يتم تخزين الكلمة في المتغير 4 .
'جافات بوينت' يتم تخزين الكلمة في المتغير 5 .

نطاق متغير

يتم تعريف المتغيرات العامة على أنها المتغيرات التي يمكن الوصول إليها في أي مكان داخل البرنامج النصي بغض النظر عن النطاق. بشكل افتراضي، يتم تعريف كافة المتغيرات كمتغيرات عامة، حتى لو تم الإعلان عنها داخل الدالة. يمكننا أيضًا إنشاء متغيرات كمتغير محلي. يمكن الإعلان عن المتغيرات المحلية داخل نص الوظيفة باستخدام 'المحلية'؟ الكلمة الرئيسية عندما يتم تعيينها لأول مرة. لا يمكن الوصول إليها إلا داخل تلك الوظيفة. يمكننا إنشاء متغيرات محلية بنفس الاسم في وظائف مختلفة. لإضافة متغير محلي، يمكننا استخدام بناء الجملة التالي:

 local var_name= 

لفهم كيفية عمل نطاق المتغيرات في Bash Scripting بشكل أفضل، راجع المثال التالي:

سكريبت باش

أمثلة على آلة مور
 #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

انتاج |

وظائف باش

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

إرجاع القيم

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

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

على سبيل المثال، خذ بعين الاعتبار الكود التالي:

سكريبت باش

 #!/bin/bash #Setting up a return status for a function print_it () { echo Hello  return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

انتاج |

وظائف باش

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

سكريبت باش

 #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

انتاج |

 Welcome to Javatpoint. 

تجاوز الأوامر

لدينا خيار لتجاوز أوامر bash عن طريق إنشاء دالة بنفس اسم الأمر الذي سنقوم بتجاوزه. على سبيل المثال، إذا أردنا تجاوز أمر 'echo'، فعلينا إنشاء دالة باسم 'echo'.

قد يكون مفهوم تجاوز أوامر bash مفيدًا في بعض السيناريوهات، مثل عندما نريد استخدام أمر بخيارات محددة. وأيضًا عندما لا نرغب في تزويد الأمر بأكمله بخيارات عدة مرات داخل البرنامج النصي. في مثل هذه الحالات، يمكننا تجاوز أمر bash المدمج للأمر مع الخيارات. الآن دعونا نفهم مفهوم تجاوز الأوامر في Bash Shell Scripting بمساعدة بعض الأمثلة:

مثال

في هذا المثال، قمنا بتجاوز الأمر 'echo' وأضفنا الطابع الزمني في شكل الوسيطة إلى الأمر 'echo'.

سكريبت باش

 #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo  } echo 'Welcome to Javatpoint.' 

انتاج |

وظائف باش

خاتمة

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