كيفية تمرير الوسيطات إلى Bash-Script

الأوامر ، بناء الجملة والأمثلة

يمكنك كتابة برنامج نصي bash بحيث يتلقى الوسائط المحددة عند استدعاء البرنامج النصي من سطر الأوامر. يتم استخدام هذه الطريقة عندما يقوم البرنامج النصي بإجراء دالة مختلفة قليلاً استنادًا إلى قيم معلمات الإدخال (الوسيطات).

على سبيل المثال ، قد يكون لديك برنامج نصي يسمى "stats.sh" الذي ينفذ عملية معينة على ملف ، مثل حساب كلماتها. إذا كنت ترغب في استخدام هذا البرنامج النصي على العديد من الملفات ، فمن الأفضل تمرير اسم الملف كوسيطة ، بحيث يمكنك استخدام نفس البرنامج النصي لكافة الملفات المراد معالجتها. على سبيل المثال ، إذا كان اسم الملف المراد معالجته هو "songlist" ، فستدخل سطر الأوامر التالي:

sh stats.sh songlist

يتم الوصول إلى الوسيطات داخل برنامج نصي باستخدام المتغيرات $ 1 ، $ 2 ، $ 3 ، الخ ، حيث يشير $ 1 إلى الوسيطة الأولى ، $ 2 إلى الوسيطة الثانية ، وهكذا. ويتضح هذا في المثال التالي:

FILE1 = $ 1 wc $ FILE1

للقراءة ، قم بتعيين متغير باسم وصفي لقيمة الوسيطة الأولى ($ 1) ، ثم استدعاء أداة حساب عدد ( wc ) على هذا المتغير ($ FILE1).

إذا كان لديك عدد متغير من الوسيطات ، فيمكنك استخدام متغير "$ @" ، وهو مصفوفة لجميع معلمات الإدخال. هذا يعني أنه يمكنك استخدام حلقة for إلى معالجة متكررة كل واحدة ، كما هو موضح في المثال التالي:

لـ FILE1 في "$ @" القيام wc $ FILE1 القيام به

في ما يلي مثال لكيفية تسمية هذا البرنامج النصي بوسائط من سطر الأوامر:

sh lists.sh songlist1 songlist2 songlist3

إذا كانت إحدى الوسيطات تحتوي على مسافات ، فستحتاج إلى إرفاقها بعلامات اقتباس مفردة. فمثلا:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

وكثيرا ما يتم كتابة برنامج نصي بحيث يمكن للمستخدم تمرير في الحجج في أي ترتيب باستخدام الأعلام. باستخدام طريقة العلامات ، يمكنك أيضًا جعل بعض الحجج اختيارية.

لنفترض أن لديك برنامجًا نصيًا يقوم باسترداد معلومات من قاعدة بيانات تستند إلى معلمات محددة ، مثل "اسم المستخدم" و "التاريخ" و "المنتج" ، ويقوم بإنشاء تقرير في "تنسيق" محدد. الآن تريد كتابة البرنامج النصي الخاص بك بحيث يمكنك تمرير هذه المعلمات عندما يتم استدعاء البرنامج النصي. قد يبدو كالتالي:

makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf

يمكّن Bash هذه الوظيفة مع وظيفة "getopts". بالنسبة إلى المثال أعلاه ، يمكنك استخدام getopts على النحو التالي:

هذا هو حلقة while تستخدم الدالة "getopts" وما يسمى "optstring" ، في هذه الحالة "u: d: p: f:" ، للتكرار خلال الوسيطات. تسير الحلقة الداخلية خلال سلسلة الأوتار ، والتي تحتوي على العلامات التي يمكن استخدامها لتمرير الوسيطات ، وتعيين قيمة الوسيطة المقدمة لتلك العلامة إلى "الخيار" المتغير. ثم يقوم بيان الحالة بتعيين قيمة متغير "الخيار" للمتغير الشامل الذي يمكن استخدامه بعد قراءة جميع الوسيطات.

تعني النقطتين في optstring أن القيم مطلوبة للأعلام المقابلة. في المثال أعلاه ، يتم تتبع كل العلامات بنقطتين: "u: d: p: f:". هذا يعني أن جميع العلامات تحتاج إلى قيمة. إذا لم تكن علامات "d" و "f" ، على سبيل المثال ، لها قيمة ، فسيكون optstring "u: dp: f".

القولون في بداية الأوتار ، على سبيل المثال ": u: d: p: f:" ، له معنى مختلف تمامًا. انها تسمح لك للتعامل مع الأعلام التي لا يتم تمثيلها في optstring. في هذه الحالة ، يتم تعيين قيمة متغير "الخيار" على "؟" ويتم تعيين قيمة "OPTARG" إلى العلامة غير المتوقعة. يسمح لك بعرض رسالة خطأ مناسبة لإعلام المستخدم بالخطأ.

يتم تجاهل الوسيطات التي لا تسبقها إشارة بواسطة رموز التشغيل. إذا لم يتم توفير علامات محددة في optstring عندما يتم استدعاء البرنامج النصي ، لا يحدث شيء ، إلا إذا كنت تعالج هذه الحالة بشكل خاص في التعليمات البرمجية. لا يزال يمكن التقاط أي الحجج لا يتم التعامل معها عن طريق getops مع المتغيرات العادية $ 1 ، $ 2 ، الخ.