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

How Execute Commands From Within Shell Script



في bash ، يمكن أن يكون تنفيذ الأوامر من برنامج shell script مخيفًا بعض الشيء في البداية وقد يتطلب قفزة إيمانية. بعد كل شيء ، الأوامر المنفذة داخل نص برمجي باش ليست تفاعلية. سنرسي هنا الأساس لتنفيذ الأوامر من داخل نص شيل بالإجابة على الأسئلة التالية حول الأوامر: من أين أتت؟ ما هم؟ كيف نستخدمها في النص؟

من أين تأتي الأوامر؟

تأتي الأوامر في bash من أي من الفئات التالية:







باش نفسها (انظر البنايات)

يأتي Bash مع مجموعة الأوامر الخاصة به للسماح بالوصول إلى ميزاته المضمنة مثل إعلان المصفوفات وقراءة الأسطر من ملف والميزات الأخرى المضمنة في bash. نحن نطلق على أوامر من هذه الفئة أوامر bash builtin أو buildins للاختصار.



العناصر القابلة للتنفيذ في بيئتك (انظر الأوامر الخارجية)

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



وظيفة محددة من قبل المستخدم (انظر الوظائف)

قبل تنفيذ الأوامر الخارجية والمبنى ، يتحقق bash من تعريف دالة. إذا كان يتم تنفيذ الوظيفة كأمر. إذا لم يحدث ذلك ، فإنه ينتقل إلى أسفل ترتيب أسبقية الأوامر. من أجل تنفيذ الوظيفة المحددة خارج البرنامج النصي ، يجب التصريح عنها بالسمة -x ؛ خلاف ذلك ، يمكن تضمينها باستخدام. أمر. نحن نطلق على أوامر هذه الفئة وظائف أو وظائف محددة بواسطة المستخدم باختصار.





ما هي الاوامر

الأمر هو أي كلمة يتم التعامل معها كنقطة دخول واحدة لبرنامج داخل بيئة shell. في حالة تنفيذ الأمر ، يتم تمرير الأمر نفسه والوسيطات الاختيارية كمعلمات موضعية ، $ {0} ، $ {1} ، $ {2} ،… تعيّن المعلمة الموضعية الصفرية ($ {0}) الأمر نفسه ولم يتغير في السياق. وهذا يعني ، على عكس المعلمات الموضعية في الدوال ، $ {1} ، $ {2} ، ... التي قد تتغير وفقًا للسياق ، فإن $ {0} لم يتغير بين استدعاءات الوظائف.

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



فيما يلي قائمة بأنواع الأوامر التي يجب معرفتها.

أوامر مدمجة

هؤلاء هم مواطنون من الدرجة الأولى في عالم bash ، بما في ذلك شخصيات مثل '.' ':' '[' ']' وكلمات محفوظة مثل إعلان في باش. يمكنك الاعتماد على هذه الأوامر ، الموجودة في قائمة أوامر bash المضمنة ، لتكون متاحة للاستخدام في برنامج bash النصي الخاص بك.

اعتمادًا على التعيين ورقم الإصدار لمترجم bash الخاص بك ، قد لا تتوفر بعض الأوامر.

أوامر خارجية

الأوامر الخارجية هي ملفات قابلة للتنفيذ يمكن الوصول إليها خارج نصوص bash مثل curl. على عكس الوظائف ، لا يتم تخزين الأوامر الخارجية كمتغيرات.

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

باش: أمر غير معروف:أمرغير موجود

في نص برمجي bash ، قد تتجاوز الوظائف سلوك الأمر الخارجي إذا كانت تشترك في نفس الاسم كما رأينا سابقًا في أمثلة curl bash. يتبع مثال على أمر خارجي مخصص باستخدام وظيفة.

لفة() {
أمر {FUNCNAME} دولار...
}

يعمل هذا لأن الوظائف لها أسبقية أعلى من الأوامر الخارجية وحتى bash buildins. القيد هو الأحرف المسموح بها في اسم الوظيفة.

لاحظ أنه يمكن إنجاز المثال أعلاه باستخدام اسم مستعار على النحو التالي.

الاسم المستعار لفة= '
{
لفة ...
}
'

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

المهام

دالات حكم في باش. قبل النظر إلى الأوامر المدمجة والأوامر الخارجية ، يتحقق bash مما إذا كانت دالة محددة بواسطة اسم دالة مرشح ، أو ظهور الكلمة الأولى على سطر أو بعد ؛ حرف يعين نهاية سطر الأوامر. الاستثناء الوحيد هو متغيرات bash المكتوبة بأحرف كبيرة مثل $ {FUNCNAME}.

الاسم المستعار() { FUNCNAME= قوات الدفاع الذاتي الجوية ؛رما - طرد - قذف $ {@ ،،}؛}
الاسم المستعار لفة='اختبار التجعيد البديل'

أوامر بسيطة

يتم تعريف الأوامر البسيطة في صفحات bash man على أنها كلمة متبوعة بوسائط اختيارية. في السياق ، قد يكون الأمر البسيط إما أمرًا داخليًا أو خارجيًا أو وظيفة.

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

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

فيما يلي بعض الطرق للتحكم في الأسبقية في نص برمجي باش.

دع باش يقرر

command_name

بالنسبة للجزء الأكبر ، خاصة في البداية ، نترك bash يقرر أي أمر يجب استخدامه. ومع ذلك ، هناك حالات قد لا يتم فيها تفسير نواياك بشكل صحيح بواسطة bash. هذا هو الحال عندما تتداخل أسماء الوظائف والأوامر الخارجية أو المبنية.

نفّذ أمرًا خارجيًا

أمرcommand_name

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

أمثلة الأوامر الخارجية

أمثلة الأوامر الخارجية التي تفترض تثبيت ما يلي:

ملف
يذهب
تين
مثال: الحصول على نوع الملف والمعلومات
{ # الحصول على نوع الملف والمعلومات
ملف $ {infile} # (1،2)
}
# (1) الأمر ، ملف
# (2) infile = {مسار الملف}
مثال: المرحلة المعدلة والملفات الجديدة في git
{ # ملفات المرحلة في git
بوابة إضافة.رقم (1)
}
# (1) الأمر ، بوابة
مثال: إنشاء فن أسكي باستخدام الشكل
{ # إنشاء فن أسكي
تين$ {message} # (1،2)
}
# (1) الأمر ، الشكل
# (2) message = {Message to display as ascii art}

نفذ أمرًا مدمجًا

مدمجcommand_name

افترض أن command_name هو أحد الأوامر التي تم تعريفها على أنها مضمنة في bash. للسماح لـ bash بمعرفة أننا نريد تشغيل command_name باعتباره مدمجًا ، نستخدم العنصر المدمج.

أمثلة الأوامر المضمنة
مثال: كم عدد المباني؟
مدمج{و}{،،}{،،،} # كم عدد المباني؟
مثال: إعلان فانتوم
{
يعلن() { رما - طرد - قذفوجه الفتاة!؛}
يعلن–xfيعلن
}

استنتاج

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