كيفية استخدام الوظائف في Bash

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

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

تحديد الأدوار

هناك طريقتان لتعريف الوظائف: مع أو بدون إعلان الوظيفة:

function nombre_funcion () 
{
    # codigo
}

أو هذا الآخر ، وهو الذي أستخدمه كما سترى لاحقًا.

nombre_funcion ()
{
    # codigo
}

أيضا يوفر Bash أيضًا طريقة لتمرير المعلمات وإرجاع النتائج. التي سنراها في المقالات المستقبلية.

#!/usr/bin/env bash

# ~/.bin/encontrar
# encuentra archivos a partir de la descripción de su nombre en un directorio específico
#
# Por Pedro Ruiz Hidalgo
# version 1.0.0
# Copyright © enero 2017
#
#

EXIT_OK=0
EXIT_BAD=66

PATRON=$1
DIRECTORIO=$2

autor ()
{
 echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n"
}

ayuda ()
{
 echo -e "\nencontrar [PATRON] [DIRECTORIO]\n"
} 

noparams ()
{
 echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n"
 read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r
 if [[ $REPLY =~ ^[Ss]$ ]];
    then
       echo ""
       ayuda
 fi
}

nodir ()
{
 echo -e "\nDirectorio no Existe\n"
}

if [[ $PATRON == "-h" ]];
then 
 ayuda
 exit $EXIT_OK
fi

if [[ $PATRON == "-a" ]];
then 
 autor
 exit $EXIT_OK
fi

if [ $# -lt 2 ];
then
 noparams
else
 if [ -d $DIRECTORIO ];
 then
 echo ""
 find $DIRECTORIO -name $PATRON*
 echo ""
 exit $?
 else 
 nodir 
 exit EXIT_BAD
 fi
fi


تحليل السيناريو

تعريفات

لباش يجب أن تحتوي كل عملية مكتملة بنجاح على الرمز "0" كإشارة. يحدد السطران 12 و 13 رموز الخطأ التي تم التعامل معها EXIT_OK للنجاح y EXIT_BAD للخروج عند الفشل.

في السطرين 15 و 16 ، يتم تعيين المعلمات الأولى ($ 1) والمتغير الدليل ($ 2) لمتغيري PATTERN و DIRECTORY اللذين يظهران في سطر الأوامر بعد اسم البرنامج النصي ، كما سنرى لاحقًا عند تنفيذه.

في السطر 18 ننشئ وظيفتنا الأولى. وظيفة تسمى «المؤلف» تعرض ملف تأليف النص عندما نسميها باستخدام الوسيطة "-a" كما ترى في if على السطور 50 ~ 54. الحجة "-و" من السطر 23 يسمح بعرض تسلسل «السطر التالي» عن طريق ترميز «\ n».

استدعاء noparams (الأسطر 28 ~ 37) هو المسؤول عن معالجة الأحداث التي يجب أن تحدث عندما يتم استدعاء البرنامج النصي بدون أي معلمات. نعرض ، محاطين بشكل صحيح بين رموز الأسطر الجديدة ، رسالة تشير إلى أنه يجب تنفيذ البرنامج النصي بمعاملتين ، ثم يظهر خيار (السطر 31) للاستخدام اقرأ يطلب منك الضغط على "S" أو "s" في حالة رغبتك في إظهار المساعدة. في السطر 32 نقول حرفيًا: 'إذا كان الجواب (هذا يأتي إلينا في المتغير REPLY دولار) يحتوي على أي من الأحرف الكبيرة أو الصغيرة ، ثم (السطر 33) يعرض سطرًا فارغًا (السطر 34) وينفذ وظيفة المساعدة (الأسطر 23 ~ 26).

سيتم تنفيذ وظيفة nodir (الأسطر 39 ~ 42) عندما نكتشف أن الدليل الذي تتم محاولة البحث فيه غير موجود.

وظائف

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

إذا كان PATTERN (المعلمة الأولى كما هو موضح في السطر 15) هي "-a" ، يتم عرض المؤلف باتباع نفس الآلية الموضحة في الفقرة السابقة للخيار "-h".

على الخط 56 يتم التحكم في أننا لم نتلق أقل من معلمتينفي هذه الحالة ، يتم تنفيذ وظيفة noparams ، ثم في حالة السطر 60 نكتشف ذلك إذا كان الدليل الذي نريد البحث فيه موجودًا، إذا كان موجودًا ، فسيتم عرض سطر فارغ ، و تجد القيادة مع عنوان الدليل الذي نريد إجراء البحث فيه متبوعًا بالنمط (بداية اسم الملف الذي نبحث عنه) سطر فارغ جديد واستخدام خروج $؟ نعهد بإخراج البرنامج النصي الخاص بنا إلى النتيجة الناتجة عن البحث. في حالة حالة وجود الدليل غير صحيح (السطر 67) نقوم باستدعاء وظيفة nodir و خرجنا مما يشير إلى إنهاء غير طبيعي.

التنفيذ والاختبار

$ encontrar
$ encontrar -a
$ encontrar -h
$ encontrar index aljflaskjf #directorio no existe
$ encontrar index public_html
$

En المقالات التالية عن باش سنرى آليات استخدام المعلمات في الوظائفسنرى أيضا كيف بيانات الإرجاع المفصلة منها.

آمل وآمل أن يكون هذا المنشور مفيدًا لك.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   josea قال

    مرحبا،
    شيق جدا وواضح جدا.
    مجرد ملاحظة؛ a $ مفقود في السطر 68 أمام المتغير EXIT_BAD.
    سأستمر في التعلم بالتأكيد مع مقالاتك.