Bash / المتوسط: بيانات ومسارات فشل موثوقة / الدرس 11
اختيار لغة الاختبار الصحيحة
ميز test و[[ ]] والحساب والأنماط والتعبيرات المنتظمة دون غموض تحليل.
في هذه الصفحة
أهداف الدرس
- شرح test الوسائطي وشروط Bash.
- ضبط الحرفي والنمطي بالاقتباس.
- التحقق من الخارجي قبل الحساب.
يتلقى أمر الأقواس وسائط
[ واجهة وسائط تحتاج ] وفواصل. اقتبس الفارغ والمتباعد كي لا تتغير البنية. فضل البسيط الموصول بـ && أو || على -a و-o الملتبسين. تفحص الملفات لحظة ولا تضمن الفتح التالي. استخدمها للتشخيص مع معالجة العملية، ولا يعني -f الثقة بالمحتوى.
تمنع شروط Bash التقسيم المعتاد
[[ قواعد Bash بتوسعة خاصة دون التقسيم والملفات المعتادين. لا يلغي ذلك أثر الاقتباس؛ فاقتباس يمين == يغير النمط واقتباس المنتظم يجعله حرفياً. ميز النص والنمط والعدد. ليست [[ قواعد sh فلا تصف برنامجها محمولاً لكل الصدف.
value='report.txt'
pattern='*.txt'
if [[ $value == $pattern ]]; then printf 'pattern=yes\n'; fi
if [[ $value == "$pattern" ]]; then
printf 'literal=yes\n'
else
printf 'literal=no\n'
fi
pattern=yes
literal=no
يحتفظ المعامل غير المقتبس بمعنى النمط داخل [[ ويطلب اقتباسه مساواة الأحرف حرفياً.
للتعبيرات المنتظمة قواعد مستقلة
تستخدم =~ منتظماً موسعاً وفق التنفيذ. احفظ ثابتاً بمتغير ووسعه غير مقتبس في جانبه للدلالة المنتظمة؛ قد يجعله الاقتباس حرفياً. تحفظ BASH_REMATCH النص والمجموعات كحالة عامة فانسخها قبل التالي. ثبت حدود التحقق للكل؛ لا يثبت الجزء صلاحية القيمة كاملة.
value='job-42'
regex='^job-([0-9]+)$'
if [[ $value =~ $regex ]]; then
number=${BASH_REMATCH[1]}
printf 'id=%s\n' "$number"
fi
id=42
تلزم المثبتات تطابق الكل وتطبع الأرقام نصاً دون حساب غير موثوق.
الحقيقة الحسابية ليست نجاحاً متنكراً
تقيم (( )) الصحيح وتعيد حالة صفر حين قيمة التعبير غير صفر. يعاكس ذلك حدس الصفر العددي، فيؤثر على if و&& وerrexit. قد تفسر المراجع تعبيرات تكرارياً فتحقق من الخارجي. حدد الإشارة والصفر البادئ والمدى والتجاوز. ليست Bash عشريات دقيقة بلا حد؛ استخدم أداة مناسبة للأعقد.
اختبار حدود القواعد والعملية الفعلية
تشمل الاختبارات الفارغ والمسافة والأنماط والمنتظم والشرطة والعدد المشوه والحد الصحيح، مع القبول والرفض. عالج القراءة أو الكتابة بعد فحص الملف لتغير الكائن. قلل الحالة العامة ووثق من يستبدل BASH_REMATCH. اختبر القرار والخرج لا تكرار الشرط بصيغة أخرى.
الأخطاء الشائعة وإصلاحها
توقف منتظم مقتبس عن التطابق
- لماذا يحدث؟
- حول الاقتباس المحارف لحرفية.
- كيف تصلحه؟
- استخدم متغير تعبير ثابتاً بتوسعة مقصودة.
- كيف تتجنب تكراره؟
- اختبر الحرفي والنمطي منفصلين.
قبول الجزء تحققاً كاملاً
- لماذا يحدث؟
- لم يثبت التعبير للكل.
- كيف تصلحه؟
- عرف القواعد وثبتها.
- كيف تتجنب تكراره؟
- أدرج بادئات ولواحق باطلة.
اعتبار فحص الملف ضمان فتح لاحق
- لماذا يحدث؟
- قد يتغير الكائن بينهما.
- كيف تصلحه؟
- عالج فشل العملية نفسها.
- كيف تتجنب تكراره؟
- استخدم المحمولات للقرار لا ضمان أمني.
اختبر فهمك
1. لماذا يختلف اقتباس $pattern في [[ ؟
اعرض الحل المشروح
يجعل اقتباس اليمين القيمة حرفية ويسمح غيره بمحارف النمط. اختر من العقد واختبر نجمة حرفية.
2. يلتقط منتظم قيمة ثم يطابق مساعد آخر نصاً. ماذا يحفظ المستدعي؟
اعرض الحل المشروح
انسخ المطلوب فور الأول؛ فقد يستبدل الثاني المصفوفة العامة. فضل قيماً صريحة أو نسخاً محلية لا اعتماداً خفياً على آخر منتظم.
أهم ما تعلمته
- سم قواعد الاختبار واختر الاقتباس لها.
- تحقق من الكل وعالج العملية مستقلاً.