وسائط واختيارات Script ($@، $ of، getopts)
تعلّموا تمرير الوسائط إلى scripts وتحليل اختيارات سطر الأوامر باستخدام المتغيرات الخاصة و'getopts'.
وسائط واختيارات Script ($@، $ of، getopts) درس مجاني في DevOps Bootcamp على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في DevOps Bootcamp، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
معاملات النص البرمجي: لماذا نستخدمها؟
هل سبق أن استخدمت أمرًا مثل ls -l أو cp file1 file2؟ إن -l وfile1 وfile2 كلها معاملات! فهي تخبر الأمر بما يجب فعله أو بالعناصر التي يجب أن يعمل عليها.
في كتابة نصوص Bash البرمجية، تجعل المعاملات نصوصك البرمجية مرنة. فبدلًا من تثبيت القيم داخل النص البرمجي، يمكن لنصك البرمجي قبول الإدخال مباشرة من سطر الأوامر عند تشغيله.
الوصول إلى المعاملات الموضعية
عند تشغيل نص برمجي باستخدام معاملات، يعيّنها Bash تلقائيًا إلى متغيرات خاصة تُسمى المعلمات الموضعية.
- المعامل الأول هو
$1. - المعامل الثاني هو
$2. - وهكذا حتى
$9.
للوصول إلى المعاملات التي تتجاوز 9، استخدم الأقواس المعقوفة مثل ${10} و${11} وغيرهما. وتحتوي هذه المتغيرات على القيم التي مُررت إلى نصك البرمجي.
عرض توضيحي: المعاملات الموضعية
لنرَ كيفية الوصول إلى هذه المعاملات في نص برمجي. احفظه باسم greet.sh وشغّله باستخدام ./greet.sh Alice Bob.
#!/bin/bash
echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"`$0` و`$#`: معلومات النص البرمجي
يوفر Bash بعض المتغيرات الخاصة الإضافية التي تمنحك معلومات عن النص البرمجي نفسه ومعاملاته:
$0: يحتوي على اسم النص البرمجي قيد التنفيذ. ويفيد في رسائل الخطأ أو التسجيل.$#: يحتوي هذا المتغير على العدد الإجمالي للمعاملات الموضعية الممررة إلى النص البرمجي.
تساعد هذه المتغيرات على جعل نصوصك البرمجية أكثر موثوقية وسهولة في الاستخدام.
عرض توضيحي: `$0` و`$#`
شغّل هذا النص البرمجي بأعداد مختلفة من المعاملات، مثل ./info.sh one two three أو باستخدام ./info.sh فقط.
#!/bin/bash
echo "Script name: $0"
echo "Number of arguments received: $#"`$@` مقابل `$*`: جميع المعاملات
قد تحتاج أحيانًا إلى الإشارة إلى جميع المعاملات دفعة واحدة. يوفر Bash طريقتين:
$@: يتمدد إلى معاملات منفصلة. وعند وضعه بين علامتَي اقتباس مزدوجتين ("$@")، يظل كل معامل كلمة مستقلة، حتى إذا احتوى على مسافات. ويُفضّل هذا عادةً في الحلقات.$*: يتمدد إلى سلسلة واحدة تضم جميع المعاملات. وعند وضعه بين علامتَي اقتباس مزدوجتين ("$*")، تُدمج جميع المعاملات في كلمة واحدة، وتُفصل باستخدام الحرف الأول منIFS(فاصل الحقول الداخلي، وهو المسافة عادةً).
استخدم دائمًا "$@" عند التكرار عبر المعاملات للحفاظ على المسافات!
عرض توضيحي: التكرار باستخدام `"$@"`
يوضح هذا النص البرمجي كيفية تعامل "$@" بشكل صحيح مع المعاملات التي تحتوي على مسافات. شغّله كما يلي: ./loop_args.sh hello "world wide" web
#!/bin/bash
echo "Processing arguments with \"$@\":"
for arg in "$@"; do
echo " Argument: [$arg]"
done
echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
echo " Argument: [$arg]"
doneالخيارات: ما يتجاوز المعاملات الموضعية
تُعد المعاملات الموضعية مناسبة للحالات البسيطة، ولكن ماذا لو كان نصك البرمجي يحتاج إلى خيارات اختيارية أو معلمات مسماة، مثل -v للإخراج المطوّل أو -f filename؟
هنا تأتي خيارات سطر الأوامر. فهي تجعل النصوص البرمجية أكثر مرونة وسهولة في الاستخدام، إذ تتيح للمستخدمين تحديد الإعدادات بأي ترتيب.
يوفر Bash الأمر getopts خصيصًا لتحليل هذه الأنواع من الخيارات.
بنية `getopts`: `optstring`
البنية الأساسية لـ getopts هي: getopts optstring variable.
optstring: سلسلة من محارف الخيارات الصالحة. إذا كان الخيار يتطلب معاملًا، مثل-f filename، فأتبِع المحرف بنقطتين، مثلf:.variable: اسم متغير يخزن فيهgetoptsمحرف الخيار الذي تتم معالجته حاليًا، مثلopt.
يعيّن getopts أيضًا قيمة OPTARG لمعاملات الخيارات، وقيمة OPTIND لفهرس المعامل التالي.
عرض توضيحي: `getopts` الأساسي
يعالج هذا النص البرمجي خياري -v (الإخراج المطوّل) و-f (الملف). جرّب تشغيله: ./options.sh -v -f mydata.txt -x أو ./options.sh -vf mydata.txt
#!/bin/bash
while getopts "vf:" opt; do
case $opt in
v)
echo "Verbose mode enabled."
;;
f)
echo "File specified: $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
doneتحقق سريع: متغيرات المعاملات
تأمل النص البرمجي التالي وطريقة تنفيذه:
#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
echo "Arg: $arg"
doneإذا شغّلته باستخدام: ./myscript.sh "Hello World" 123
فما المخرجات المتوقعة؟
مراجعة: المعاملات والخيارات
أحسنت! لقد تعلمت كيفية جعل نصوص Bash البرمجية أكثر تنوعًا بكثير:
- المعاملات الموضعية: استخدم
$1و$2وغيرهما للوصول إلى المعاملات مباشرةً. - المتغيرات الخاصة: استخدم
$0لاسم النص البرمجي، و$#لعدد المعاملات، و"$@"للتكرار بأمان عبر جميع المعاملات. - خيارات سطر الأوامر: استخدم
getoptsلتحليل الخيارات المسماة، مثل-v، ومعاملاتها، مثل-f filename، مما يجعل نصوصك البرمجية أكثر موثوقية وسهولة في الاستخدام.
تدرّب على استخدام هذه العناصر في نصوصك البرمجية لبناء أدوات قوية ومرنة لسطر الأوامر!
الأسئلة الشائعة
هل درس «وسائط واختيارات Script ($@، $ of، getopts)» مجاني؟
نعم — نص درس «وسائط واختيارات Script ($@، $ of، getopts)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة DevOps Bootcamp، انتقل إلى CoddyKit PRO. تتضمن دورة DevOps Bootcamp 4 دروس في المجموع.
ماذا ستتعلم في «وسائط واختيارات Script ($@، $ of، getopts)»؟
تعلّموا تمرير الوسائط إلى scripts وتحليل اختيارات سطر الأوامر باستخدام المتغيرات الخاصة و'getopts'. تتمرن على DevOps Bootcamp مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ DevOps Bootcamp؟
لا تُشترط خبرة سابقة. DevOps Bootcamp على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «وسائط واختيارات Script ($@، $ of، getopts)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس DevOps Bootcamp هذا؟
نعم. كل درس في DevOps Bootcamp يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تراكيب الحلقات (for، while)
- الدوال في Bash Scripts
- وسائط واختيارات Script ($@، $ of، getopts)
- عبارة case ومطابقة الأنماط