الخيارات
Flags
الخيارات — Flags
الخيارات تجعل السكربت أكثر وضوحاً من الاعتماد على ترتيب غامض للمعاملات. مثال: --dry-run تعني اعرض الخطة بدون تنفيذ. --verbose تعني اطبع تفاصيل أكثر. في Bash يمكنك تحليل الخيارات البسيطة باستخدام حلقة while وcase وshift.
الأمر shift يزيل أول معامل ويجعل المعامل التالي يصبح $1. لذلك نقرأ $1، نقرر ماذا يعني، ثم نعمل shift للانتقال للتالي. هذه الصيغة مناسبة للخيارات البسيطة. إذا أصبح لديك CLI معقد بكثير، ربما حان وقت Python أو Go.
اكتب الخيارات الطويلة بوضوح. --dry-run أفضل للمستخدم الجديد من -n وحدها. يمكنك دعم الاثنين لاحقاً، لكن لا تبدأ بغموض.
مثال عملي
لاحظ أننا رفضنا الخيار غير المعروف. هذا أفضل من تجاهله، لأن المستخدم قد يكتب خطأ إملائياً ويظن أن السكربت فعل ما يريد.
خيارات القيمة — Value Flags
الخيارات المنطقية (boolean) كافية لـ--dry-run و--verbose، لكن كثيراً من السكربتات تحتاج خيارات تأخذ قيمة، مثل --output report.txt. هناك ثلاثة أشكال شائعة يجب أن تعرفها:
--output FILE) shift; output="$1" ;; # قيمة في معامل منفصل
--output=*) output="${1#--output=}" ;; # قيمة ملصقة بعد =
--) shift; break ;; # نهاية الخيارات
الشكل المنفصل --output FILE يحتاج shift إضافياً لأن $1 بعد الـshift هو القيمة. الشكل --output=value لا يحتاج shift لأن القيمة جزء من نفس المعامل؛ ${1#--output=} تحذف البادئة.
سطر -- (نهاية الخيارات) يوقف التحليل ويتيح تمرير معاملات قد تبدأ بـ- دون أن تُعامَل خيارات، مثل script.sh -- -n حيث -n هي قيمة لا خيار.
getopts — المعيار POSIX للخيارات القصيرة
للخيارات القصيرة (-o, -v, -n) يوفر POSIX أمر getopts المدمج في Bash. إنه أكثر صحة من كتابة loop يدوياً لأنه يتعامل مع تجميع الخيارات (-vo) ويُنتج رسائل خطأ موحدة.
النقطتان بعد o في "o:v" تعني أن -o تتوقع قيمة. $OPTARG يحملها. shift $((OPTIND - 1)) يُزيح الخيارات المعالجة ليبقى $@ لباقي المعاملات.
dry-run أولاً
في سكربتات الملفات والنشر، اجعل --dry-run عادة أساسية. السكربت يطبع ما سيفعله ولا يغير شيئاً. بعد المراجعة، يسمح المستخدم بالتنفيذ الحقيقي. هذه ليست رفاهية؛ هي طريقة عمل آمنة.