محتويات الدورة

Bash / المتقدم: القنوات والتزامن وتصميم واجهة قابلة للصيانة / الدرس 18

بناء عقد واجهة أوامر قابل للصيانة

اختر لغة مدعومة وحلل الخيارات بتوقع ووثق التوافق واربط الوحدات والاختبارات بالواجهة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • فصل نقل POSIX من توافق إصدار Bash.
  • استخدام getopts بخطأ ومعاملات مقصودة.
  • تصميم واجهة مستقرة باختبار غير المدعوم والمشوه.

النقل مجموعة أهداف معلنة

يسمي المحمول الصدف والمنصات. POSIX sh هدف مواصفة لا كل مثبت. تضيف Bash المصفوفات و[[ والاستبدال والمرافقة فلا تعلنها عامة بلا قيد. وقد يعقد تجنب الامتدادات برنامج Bash فقط. اختر للانتشار والصيانة؛ يضبط POSIX السلوك ولا يثبت أخرى فاختبر الأهداف.

قد يصف دليل حديث ميزات غير متاحة

سجل الأدنى أو الميزات وتحقق بالانتشار. تختلف صيغ الاستبدال وwait والمصفوفات والأعلام عن خطنا. قد يفيد فحص البدء لكن القواعد غير المدعومة تفشل قبل فحص وقت التنفيذ؛ نسق الدخول. استخدم التوثيق والاختبار المطابقين ولا تعمم الإنترنت على الأقدم. نعلن المفسر الذي تحقق من الأمثلة.

تحليل الخيارات القصيرة بأخطاء صريحة

يعالج getopts مفردات ويتتبع OPTIND. تتطلب نقطتان بعد حرف وسيطاً وتختار البادئة تشخيصاً مضبوطاً. أزح OPTIND ناقص واحد وافحص البقية وأعده للاستخدام الجديد. لا يوفر كل الطويل أو معنى القيمة. صرح المساعدة والباطل والغائب والزائد والحالات وافصل التشخيص.

bash تحليل خيار قصير ومعامل دقيق
parse() {
  local OPTIND=1 option label=default
  while getopts ':n:' option; do
    case $option in
      n) label=$OPTARG ;;
      :) return 2 ;;
      \?) return 2 ;;
    esac
  done
  shift "$((OPTIND - 1))"
  [[ $# == 1 ]] || return 2
  printf 'label=<%s> operand=<%s>\n' "$label" "$1"
}
parse -n 'review mode' -- 'red apple'
الناتج المتوقع
label=<review mode> operand=<red apple>

يستخدم محلي Bash وعقد معامل واحد وتنهي -- الخيارات ويحفظ الاقتباس المسافات دون عمل خارجي.

تصميم الخرج والتطور قبل الأعلام

توثق الواجهة stdout والتشخيص والحالات والترتيب. لا تضف لافتة لتدفق آلي بالصيانة. للأعلام افتراض وتعارض واضح ورفض قبل الآثار. افصل التحليل والعملية للاختبار ولا تنفذ المكتبة خفية عند المصدر. اربط ادعاء التوافق بما اختُبر لا المستقبل.

إبقاء القلب المحمول بسيطاً عند الحاجة

لصغير محمول استخدم المواضع وcase والاقتباس والأدوات الموثقة دون local والمصفوفة و[[. اختبر صدفة مستهدفة أخرى ولا تعممها. وعند حاجة Bash أعلنها ولا تقلد مصفوفتها بنص غير آمن. احفظ مصفوفة اختبارات للقيم والحالات والتحليل والحدود. التوقع أهم من ذكاء يعجز مسؤول عن تغييره.

bash حفظ قائمة مواضع بقلب بأسلوب POSIX
set -- 'red apple' ''
for item do
  printf '<%s>\n' "$item"
done
printf 'count=%s\n' "$#"
الناتج المتوقع
<red apple>
<>
count=2

تحفظ قائمة for الموضعية الوسيطين ويُختبر المثال في Bash وsh المحلي لا كل إصدار.

الأخطاء الشائعة وإصلاحها

امتداد Bash مع ادعاء sh عام

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

تجاوز getopts خيارات بالتكرار

لماذا يحدث؟
احتفظ OPTIND بتقدم سابق.
كيف تصلحه؟
أعد الحالة للقائمة الجديدة.
كيف تتجنب تكراره؟
اختبر تكرار المحلل.

كسر لافتة جديدة لمستهلك آلي

لماذا يحدث؟
أضيف التشخيص للبيانات المستقرة.
كيف تصلحه؟
انقل البشري للقناة الموثقة.
كيف تتجنب تكراره؟
اختبر stdout واجهة عامة.

اختبر فهمك

1. لماذا قد لا يحمي فحص إصدار وقت التنفيذ قواعد غير مدعومة لاحقاً؟

اعرض الحل المشروح

قد يحللها قبل الفحص. اختر دخولاً قابلاً للتحليل عند المرفوض أو مشغلاً بمفسر صريح واختبر الرفض أيضاً.

2. ماذا يثبت نجاح مثال محمول في sh المحلي؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • أعلن الصدفة والإصدار جزءاً من الواجهة.
  • افصل التحليل والآثار والخرج والاختبارات.

المراجع الرسمية