كيفية استخدام التوسعات $ () و $ {} في برنامج Shell Script

How Use Expansions Shell Script



إذا كنت تستخدم نظام Linux ، فقد تعرف بالفعل مدى أهمية واجهة shell للتفاعل مع نظامك. في معظم توزيعات Linux ، Bash هي الصدفة الافتراضية التي نستخدمها لتشغيل الأوامر وتنفيذ البرامج النصية. سكربت الصدفة عبارة عن مجموعة من الأوامر ، عند تنفيذها ، تُستخدم لأداء بعض الوظائف المفيدة على نظام Linux. يحتوي ملف .sh هذا ، الذي كتبه مستخدم ، على جميع الأوامر المستخدمة لأداء مهمة حتى لا نضطر إلى تشغيل هذه الأوامر يدويًا ، واحدًا تلو الآخر.

في هذا البرنامج التعليمي ، سنشرح اثنين من أكثر توسعات bash فائدة مستخدمة في نصوص الصدفة:







  • $ () - استبدال الأمر
  • $ {} - استبدال المعلمة / توسيع المتغير

يتم إجراء توسيع في Shell على النص البرمجي بعد تقسيمه إلى رموز مميزة. الرمز المميز هو سلسلة من الأحرف تعتبرها القشرة وحدة واحدة. يمكن أن يكون إما كلمة أو عامل.



لقد قمنا بتشغيل جميع الأمثلة والنصوص المذكورة في هذه المقالة على نظام Debian 10 Buster. ومع ذلك ، يمكنك نسخها بسهولة على معظم قذائف Linux. نحن نستخدم سطر أوامر دبيان الافتراضي ، الطرفية ، لهذا البرنامج التعليمي. على دبيان ، يمكنك الوصول إليه من خلال شريط بحث مشغل التطبيقات كما يلي:







للوصول إلى مشغل التطبيقات ، ما عليك سوى الضغط على مفتاح Super / Windows على لوحة المفاتيح.

$ () استبدال الأوامر

وفقًا للدليل المرجعي GNU Bash الرسمي:



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

$(أمر)
أو
'أمر'

على سبيل المثال ، تستبدل أوامر الصدى التالية إخراج أمر التاريخ كمدخلات لها:

$رما - طرد - قذف$(تاريخ)
$رما - طرد - قذف'تاريخ'

يمكنك أيضًا استخدام استبدال الأمر لتعيين قيمة إلى متغير. على سبيل المثال ، سنطبع تاريخ اليوم من خلال المتغير TODAY على النحو التالي:

$اليوم= دولار(تاريخ)
$رما - طرد - قذف 'اليوم'

هناك فائدة أخرى لاستبدال الأمر في حلقات shell للحصول على المدخلات. هنا ، سنحاول طباعة جميع ملفات .txt في مجلدنا الرئيسي باستخدام استبدال الأوامر:

لFفي /الصفحة الرئيسية/لك/ *.رسالة قصيرة
فعل
رما - طرد - قذف 'دولار و'
انتهى

استخدام استبدال الأوامر في برنامج شل النصي

الأمثلة المذكورة أعلاه هي بعض الطرق التي يمكنك من خلالها الاستفادة من قوة استبدال الأوامر في برنامج شل النصي الخاص بك. فيما يلي نموذج لتقرير الحالة يمكننا طباعته باستخدام برنامج shell النصي التالي:

#! / بن / ش

رما - طرد - قذف ***تقرير حالة***

اليوم= دولار(تاريخ)
رما - طرد - قذف 'اليوم هواليوم'

المستخدمون= دولار(من الذى | مرحاض-ال)
رما - طرد - قذف 'مستخدمو دولاراتتم تسجيل دخول المستخدمين حاليًا '

مدة التشغيل= دولار(تاريخ؛مدة التشغيل)
رما - طرد - قذف الجهوزيةUPTIME دولار'

تم استخدام استبدال الأوامر ثلاث مرات في هذا البرنامج النصي ؛ في طباعة التاريخ وتسجيل الدخول للمستخدمين ووقت التشغيل. حفظنا النص على النحو التالي:

جعله قابلاً للتنفيذ ثم قم بتشغيله من خلال الأمر التالي:

$chmod+ x status.sh
$./statys.sh

فيما يلي إخراج البرنامج النصي status.sh الخاص بنا:

يمكنك بالطبع إنشاء نصوص أكثر وضوحًا باتباع الأمثلة التي ذكرناها للتو.

توسيع / ​​استبدال المعلمات $ {}

المعلمة ، في Bash ، هي كيان يُستخدم لتخزين القيم. يمكن الإشارة إلى المعلمة برقم أو اسم أو رمز خاص. عندما تتم الإشارة إلى معلمة برقم ، فإنها تسمى المعلمة الموضعية . عندما تتم الإشارة إلى معلمة باسم ما ، فإنها تسمى عامل . عندما تتم الإشارة إلى معلمة برمز خاص ، فهذا يعني أنها معلمات ضبط تلقائي ذات استخدامات خاصة.

توسيع / ​​استبدال المعلمة هي عملية جلب القيمة من الكيان / المعلمة المشار إليها. يبدو الأمر كما لو كنت تقوم بتوسيع متغير لجلب قيمته.

أبسط صيغة ممكنة لتوسيع المعلمة هي كما يلي:

إليك كيفية استخدام توسيع المعلمة في Bash:

$ {معلمة}

على سبيل المثال ، أبسط استخدام هو استبدال المعلمة بقيمتها:

$اسم='فلان الفلاني'
$رما - طرد - قذف $ {name}

سيحل هذا الأمر محل قيمة اسم المتغير الذي سيتم استخدامه بواسطة أمر echo:

قد تفكر في أنه يمكن تحقيق الشيء نفسه عن طريق تجنب الأقواس المتعرجة على النحو التالي:

الإجابة هي أنه أثناء توسيع المعلمة ، تساعد هذه الأقواس المتعرجة في تحديد اسم المتغير. دعونا نشرح ما نعنيه بالحد هنا. اسمح لي بتشغيل الأمر التالي على نظامي:

$رما - طرد - قذف 'اسم الشخص$ name_'

النتيجة لم تطبع قيمة اسم المتغير حيث اعتقد النظام أنني كنت أشير إلى المتغير name_. وبالتالي ، لم يتم تحديد اسم المتغير الخاص بي. ستحدد الأقواس المتعرجة في المثال التالي اسم المتغير وإرجاع النتائج على النحو التالي:

$رما - طرد - قذف 'اسم الشخص$ {name}_ '

فيما يلي جميع الطرق التي يتم بها استبدال المتغيرات في شل:

$ {متغير} يستبدل هذا الأمر قيمة المتغير.
$ {متغير: -كلمة} إذا كان المتغير فارغًا أو إذا لم يتم تعيينه ، يتم استبدال الكلمة بالمتغير. قيمة المتغير لا تتغير.
$ {متغير: = كلمة} إذا كان المتغير فارغًا أو إذا لم يتم تعيينه ، يتم تعيين قيمة المتغير على كلمة.
$ {متغير:؟ message} إذا كان المتغير فارغًا أو إذا لم يتم تعيينه ، تتم طباعة الرسالة على خطأ bash القياسي.
$ {متغير: + كلمة} لو عامل تم تعيينه ، كلمة يتم استبداله بالمتغير. ومع ذلك ، فإن قيمة المتغير نفسه لا تتغير.

الأمثلة المذكورة أعلاه هي بعض الطرق التي يمكنك من خلالها الاستفادة من قوة الاستبدال المتغير في Bash. يمكنك دمج هذه الطرق لاستخدام التوسيع في نصوص الصدفة لتحقيق مهمتك الحالية على النحو الأمثل.