دليل المبتدئين إلى BASH - معلمات الإدخال

مرحبًا بك في الجزء الثاني من سلسلة دليل المبتدئين إلى BASH وهو برنامج فريد من نوعه من حيث أنه البرنامج التعليمي الوحيد الذي يقدمه BASH للمبتدئين.

سيعمل قراء هذا الدليل على بناء معرفتهم أثناء بناء معرفتي ونأمل أن يتمكنا من كتابة بعض النصوص الذكية إلى حد ما.

في الأسبوع الماضي ، غطيت إنشاء أول نص برمجي والذي يعرض ببساطة عبارة "Hello World". وهو يغطي موضوعات مثل محرري النصوص ، وكيفية فتح نافذة طرفية ، ووضع نصوصك ، وكيفية عرض كلمات "مرحبا العالم" وبعض النقاط الدقيقة على أحرف الهروب مثل علامات الاقتباس ("").

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

ما هي المعلمة؟

في البرنامج النصي "Hello World" من البرنامج التعليمي الأخير كان كل شيء ثابت للغاية. السيناريو لم يفعل الكثير على الإطلاق.

كيف يمكننا تحسين البرنامج النصي "Hello World"؟

ماذا عن السيناريو الذي يحيي الشخص الذي يديرها؟ بدلاً من قول "Hello World" ، سيقول "Hello Gary" أو "Hello Tim" أو "Hello Dolly".

بدون القدرة على قبول معلمات الإدخال ، سنحتاج إلى كتابة ثلاثة نصوص برمجية "hellogary.sh" و "hellotim.sh" و "hellodolly.sh".

من خلال السماح لبرنامجنا النصي بقراءة معلمات الإدخال ، يمكننا استخدام برنامج نصي واحد لتحية أي شخص.

للقيام بذلك ، افتح نافذة طرفية (CTRL + ALT + T) وانتقل إلى مجلد البرامج النصية بكتابة ما يلي: ( about cd command )

مخطوطات cd

قم بإنشاء برنامج نصي جديد يسمى greetme.sh بكتابة ما يلي: ( حول أمر اللمس )

المس greetme.sh

افتح البرنامج النصي في محرر المفضلة لديك عن طريق كتابة ما يلي: ( about nano command )

نانو greetme.sh

أدخل النص التالي داخل nano:

#! / bin / bash echo "hello $ @"

اضغط CTRL و O لحفظ الملف ثم CTRL و X لإغلاق الملف.

لتشغيل البرنامج النصي أدخل ما يلي في سطر الأوامر مع استبدال اسمك.

sh greetme.sh

إذا قمت بتشغيل البرنامج النصي مع اسمي فإنه يعرض الكلمات "مرحبا غاري".

يحتوي السطر الأول على سطر #! / bin / bash الذي يتم استخدامه لتعريف الملف على أنه برنامج نصي bash.

يستخدم السطر الثاني عبارة echo لتردد الكلمة مرحباً ، ومن ثم هناك تدوين $ @ غريب. ( حول أمر الصدى )

يتم توسعة $ @ لعرض كل معلمة تم إدخالها مع اسم البرنامج النصي. لذا ، إذا كتبت "sh greetme.sh tim" ، فسيتم عرض الكلمات "hello tim". إذا قمت بكتابة "greetme.sh tim smith" فسيتم عرض الكلمات "hello tim smith".

قد يكون من الجميل أن يقوم البرنامج النصي greetme.sh فقط بالقول مرحبا باستخدام الاسم الأول فقط. لا أحد يقول "hell gary newell" عندما يقابليني ، قد يقول "hello gary" رغم ذلك.

دعونا نغير البرنامج النصي بحيث يستخدم فقط المعلمة الأولى. افتح البرنامج النصي greetme.sh في nano بكتابة ما يلي:

نانو greetme.sh

تغيير البرنامج النصي بحيث يقرأ كما يلي:

#! / bin / bash echo "hello $ 1"

احفظ البرنامج النصي بالضغط على CTRL و O ، ثم قم بالخروج بالضغط على CTRL و X.

قم بتشغيل البرنامج النصي كما هو موضح أدناه (استبدل اسمي بـ yours):

sh greetme.sh غاري نيويل

عند تشغيل البرنامج النصي ، سيقول ببساطة "hello gary" (أو "hello" ومهما كان اسمك.

يشير الرمز 1 بعد الرمز الأساسي إلى أمر echo ، استخدم المعلمة الأولى. إذا قمت باستبدال $ 1 بـ $ 2 ، فسيعرض "hello newell" (أو أياً كان لقبك).

بالمناسبة ، إذا قمت باستبدال $ 2 بـ $ 3 وقمت بتشغيل البرنامج النصي بمعلمتين فقط ، فإن الناتج سيكون ببساطة "Hello".

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

لعرض عدد من المعلمات دخلت فتح النصي greetme.sh (نانو greetme.sh) وتعديل النص على النحو التالي:

#! / bin / bash echo "لقد أدخلت $ # names" صدى "hello $ @"

اضغط على CTRL و O لحفظ البرنامج النصي و CTRL و X للخروج من nano.

يعرض # $ في السطر الثاني عدد المعلمات التي تم إدخالها.

حتى الآن كل هذا كان جديدا ولكنه غير مفيد. من يحتاج إلى برنامج نصي يعرض "مرحبًا"؟

الاستخدام الحقيقي لبيانات echo هو توفير إخراج مطول وذات مغزى للمستخدم. إذا كنت تستطيع أن تتخيل أنك تريد القيام بشيء معقد والذي ينطوي على بعض التلاعب الجدي في عدد الملفات وتلاعب الملفات / المجلدات ، فمن المفيد عرض ما يحدث لكل خطوة على المستخدم.

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

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

افتح البرنامج النصي greetme.sh الخاص بك وعدله كما يلي:

#! / bin / bash echo "اسم الملف: $ 0" صدى "معرف العملية: $$" صدى "---------------------------- --- "echo" لقد أدخلت $ # names "echo" hello $ @ "

اضغط على CTRL و O لحفظ الملف و CTRL و X للخروج.

الآن قم بتشغيل البرنامج النصي (استبدل باسمك).

sh greetme.sh

هذه المرة يعرض البرنامج النصي ما يلي:

اسم الملف: greetme.sh رقم العملية: 18595 ------------------------------ لقد أدخلت 2 اسماء hello gary newell

يعرض $ 0 على السطر الأول من البرنامج النصي اسم البرنامج النصي الذي تقوم بتشغيله. لاحظ أنه الدولار بالدولار وليس الدولار.

يعرض $$ في السطر الثاني معرّف العملية للبرنامج النصي الذي تستخدمه. لماذا هذا مفيد؟ إذا كنت تقوم بتشغيل برنامج نصي في المقدمة ، فيمكنك إلغاؤه بمجرد الضغط على CTRL و C. إذا قمت بتشغيل البرنامج النصي في الخلفية وبدأت في التكرار والقيام بنفس الشيء مرارًا وتكرارًا أو بدأت تتسبب في حدوث تلف للنظام الخاص بك ، لقتلها.

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

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

من الشائع تماماً أن تتم كتابة إخراج البرنامج النصي إلى ملف الإخراج. للقيام بذلك ، قم بتشغيل البرنامج النصي الخاص بك كما يلي:

sh greetme.sh gary> greetme.log

رمز> في الأمر أعلاه إخراج النص "hello gary" إلى ملف يسمى greetme.log.

في كل مرة تقوم فيها بتشغيل البرنامج النصي باستخدام الرمز> ، تتم الكتابة فوق محتويات ملف الإخراج. إذا كنت تفضل الإلحاق بالملف ، فعليك استبدال> بـ >>.

ملخص

يجب أن تكون الآن قادرًا على كتابة نص على الشاشة وقبول معلمات الإدخال.