كيفية استخدام الوظائف في 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 المقالات التالية عن باش سنرى آليات استخدام المعلمات في الوظائفسنرى أيضا كيف بيانات الإرجاع المفصلة منها.
آمل وآمل أن يكون هذا المنشور مفيدًا لك.
تعليق ، اترك لك
مرحبا،
شيق جدا وواضح جدا.
مجرد ملاحظة؛ a $ مفقود في السطر 68 أمام المتغير EXIT_BAD.
سأستمر في التعلم بالتأكيد مع مقالاتك.