مرحبا بالجميع. هذه ترجمة من كتاب الإعداد لامتحان RedHat RHCE. في رأيي ، يمكن الوصول إليه بشكل كبير حول أساسيات bash.
مخطوطات شل هي علم في حد ذاته. دون الخوض في تفاصيل كل ما يحدث "تحت الغطاء" ، ستتعلم كيفية استخدام العناصر الأساسية لكتابة البرامج النصية الخاصة بك ، وتحليل ما يحدث في البرامج النصية للجهات الخارجية.

فهم العناصر الأساسية من البرامج النصية قذيفة
في الواقع ، يعد البرنامج النصي shell عبارة عن قائمة بالأوامر التي يتم تنفيذها بالتتابع ، وكذلك بعض المنطق الذي يسمح بتنفيذ التعليمات البرمجية فقط في ظل ظروف معينة.
لفهم نصوص شل المعقدة ، يوصى بأن تبدأ بالنصوص الأساسية.
فيما يلي نص بسيط للغاية:
أنه يحتوي على العديد من العناصر التي ينبغي استخدامها في جميع النصوص. بالنسبة للمبتدئين ، هناك shebang - هذا هو السطر #! / Bin / bash. عندما يتم تشغيل البرنامج النصي من shell الأصل ، فإنه يفتح مجلدًا فرعيًا يتم فيه تنفيذ الأوامر المحددة في البرنامج النصي.
يمكن تفسير هذه الأوامر بطرق مختلفة. من أجل فهم بالضبط كيف ينبغي تفسيرها ، يتم استخدام shebang. في المثال أعلاه ، يوضح shebang أنه يجب تنفيذ البرنامج النصي بواسطة bash shell.
ويمكن أيضا أن أشير قذائف. على سبيل المثال ، إذا كان البرنامج النصي الخاص بك يحتوي على رمز Perl ، فيجب أن يكون shebang #! / Usr / bin / perl. يعد بدء البرنامج النصي مع shebang ممارسة جيدة ؛ إذا تم حذفها ، فسيتم تنفيذ رمز البرنامج النصي بواسطة نفس shell المستخدم لتشغيل البرنامج النصي.
مباشرة بعد shebang ، هناك جزء يشرح ما هو السيناريو حول. بعض أسطر التعليقات في بداية كل سيناريو هي فكرة جيدة. غالبًا ما يكون الأمر واضحًا في نص قصير ، ولكن كلما زاد طول النص ، وكلما زاد عدد الأشخاص الذين شاركوا في كتابته ودعمه ، أصبح من غير الواضح ما ينوي المؤلفون فعله.
لتجنب هذا الموقف ، تأكد من إضافة سطور تعليق تبدأ بكل حرف. لا يمكن أن تكون التعليقات في الأسطر الأولى فقط ، ولكن أيضًا في بداية كل قسم فرعي من البرنامج النصي. هذا سوف يساعد بالتأكيد إذا كنت تقرأ السيناريو الخاص بك في غضون بضعة أشهر!
يمكنك أيضًا التعليق ليس فقط على الأقسام الفرعية ، ولكن أيضًا على الأسطر الفردية.
بغض النظر عن الموضع الذي يتم استخدامه فيه ، كل شيء من الحرف # إلى نهاية السطر هو تعليق.
بعد كتلة التعليق ، يوجد نص البرنامج النصي. في المثال أعلاه ، هناك العديد من الأوامر المنفذة بالتسلسل. قد يزيد نص البرنامج النصي shell أثناء تطويره.
في نهاية البرنامج النصي ، قمت بتضمين عبارة
الخروج 0 . يخبر بيان الخروج shell الأصل ما إذا كان البرنامج النصي ناجحًا. حالة خروج الأمر الأخير في البرنامج النصي هي حالة خروج البرنامج النصي نفسه ، إلا إذا تم استخدام
الخروج 0 في نهاية البرنامج النصي.
من المفيد أن تعرف أنه يمكنك العمل مع
مخرج لإخبار القشرة الأم كيف تسير الأمور.
قدم في قذيفة الأم ، صدى $؟ يسمح لك بالاستعلام عن حالة خروج آخر برنامج نصي قيد التشغيل.
بعد إنشاء البرنامج النصي ، تأكد من أنه يمكن تنفيذه. الطريقة الأكثر شيوعًا للقيام بذلك هي تطبيق بت قيد التشغيل عليه. لذلك ، إذا كان اسم ملف البرنامج النصي مرحبًا ، فاستخدم الأمر
chmod + x ./hello لجعله قابلاً للتنفيذ.
يمكن أيضًا تنفيذ البرنامج النصي كوسيطة لأمر bash. في هذه الحالة ، أدخل
bash . / hello لتشغيل برنامج hello النصي. إذا تم تشغيل البرنامج النصي كوسيطة لأمر bash ، فلن يكون ملف البرنامج النصي قابلاً للتنفيذ.
في الواقع ، يمكنك تخزين البرنامج النصي في أي مكان ، ولكن إذا كنت ستقوم بتخزينه في دليل غير مضمن في المتغير $ PATH ، فأنت بحاجة إلى تنفيذه باستخدام ./ أمام اسم البرنامج النصي.
اكتب. /
مرحبًا لتشغيل البرنامج النصي ، أو ضعه في الدليل القياسي المضمّن في المتغير $ PATH ، على سبيل المثال ، / usr / local / bin.
يمكنك أيضًا وضع البرنامج النصي في دليل / bin ، وبعد ذلك فقط أدخل اسم الملف في أي مكان في نظام الملفات وسيتم تنفيذ البرنامج النصي.
مثالباستخدام
vi / bin / datetime ، قم بإنشاء ملف يسمى datetime في الدليل / bin. الصق هذا المحتوى في الملف الذي تم إنشاؤه:
بعد حفظ الملف ، أدخل
chmod + x / bin / datetime لمنح إذن الملف للتنفيذ. على سبيل المثال ، قم بالتغيير إلى الدليل الرئيسي الخاص بك باستخدام
الأمر cd ~ وأدخل ببساطة
التاريخ .
انتقل ، على سبيل المثال ، إلى الدليل الرئيسي للقرص المضغوط ~ وأدخل فقط وقت البيانات.
[root@localhost ~]
باستخدام المتغيرات والمدخلات
البرامج النصية bash هي أكثر بكثير من مجرد قائمة من الأوامر التي يتم تنفيذها بالتتابع. واحدة من الأشياء اللطيفة حول البرامج النصية هي أنها يمكن أن تعمل مع المتغيرات والمدخلات لجعل البرنامج النصي مرنا. في هذا القسم سوف تتعلم كيفية العمل معهم.
باستخدام المعلمات الموضعية
عند تشغيل البرنامج النصي ، يمكنك استخدام الوسائط. الوسيطة هي كل ما تضعه وراء أمر نصي. يمكن استخدام الوسائط لجعل البرنامج النصي أكثر مرونة. خذ الأمر
useradd ليزا . في هذا المثال ، يكون الأمر
useradd ، وتشير وسيطة
lisa إلى ما يجب القيام به.
نتيجة لهذا الأمر ، يجب إنشاء مستخدم باسم ليزا.
في البرنامج النصي ، تكون الوسيطة الأولى هي
$ 1 ، والوسيطة الثانية هي
$ 2 ، وهكذا .القائمة 1 تُظهر كيفية استخدام الوسائط. حاول تشغيل هذا الرمز عن طريق تحديد أي أسماء مستخدمين كمعلمات.
قائمة 1
المعلمات تعني إدخال البيانات قبل تشغيل البرنامج النصي. في هذه الحالة ، قمت بتحديد
lisa و
lori و
bob كمعلمات بعد اسم البرنامج النصي للوسيطة:
[root@server1 ~]
إذا حاولت تشغيل نموذج التعليمات البرمجية ، فقد تلاحظ أن محتوياته ليست مثالية. إذا كنت تستخدم ثلاث وسيطات عند تنفيذ البرنامج النصي من القائمة 1 ، فسوف يعمل بشكل جيد. إذا كنت تستخدم وسيطين فقط ، فإن الثالثة هي الإخراج بدون القيمة $ 3.
إذا كنت تستخدم أربع وسائط ، فلن يتم عرض القيمة الرابعة (التي سيتم تخزينها في $ 4). لذلك ، إذا كنت ترغب في استخدام الوسائط ، فأفضل استخدام نهج أكثر مرونة.
ادراج 2
توضح القائمة 2 عنصرين جديدين يتعلقان بالوسائط:- $ # هو عداد يوضح عدد الوسائط التي تم استخدامها عند تشغيل البرنامج النصي.
- $ @ هي قائمة بجميع الوسائط التي تم استخدامها عند تشغيل البرنامج النصي.
لسرد الوسائط التي تم استخدامها عند تشغيل هذا البرنامج النصي ، يتم استخدام حلقة
for . في الحلقات ، يتم تنفيذ التعليمات طالما كانت الحالة صحيحة. في هذا السيناريو ، يعني شرط
i in $ @ "لكل وسيطة." في كل مرة ينتقل فيها البرنامج النصي إلى الحلقة ، يتم تعيين القيمة من المتغير
$ @ إلى المتغير
$ i .
لذلك ، طالما هناك وسيطات ، يتم تنفيذ نص البرنامج النصي.
دائمًا ما يبدأ نص حلقة for
بالقيام به ويتم إغلاقه ، ويتم سرد الأوامر التي سيتم تنفيذها بين هاتين الكلمتين الرئيسيتين. وبالتالي ، فإن نموذج البرنامج النصي سيستخدم
الصدى لعرض قيمة كل وسيطة ويتوقف عند عدم توفر المزيد من الوسائط.
دعونا نجرب البرنامج النصي في القائمة 2 في هذا المثال:- اكتب vi وسيطة لإنشاء ملف الوسيطة ونسخ المحتويات من البرنامج النصي في إدخال 2 إلى هذا الملف.
- احفظ الملف واجعله قابلاً للتنفيذ.
- قم بتشغيل الأمر. / argument abc . سترى أن ثلاثة خطوط يتم عرضها.
- قم بتشغيل الأمر. / argument abcdef . سترى أنه بالإضافة إلى abc ، سيتم عرض de f أيضًا.
المتغيرات
المتغير هو تسمية تستخدم للإشارة إلى مكان معين في الذاكرة يحتوي على قيمة محددة. يمكن تعريف المتغيرات بشكل ثابت باستخدام NAME = قيمة أو ديناميكيًا. هناك حلان لتحديد المتغير ديناميكيًا:
- استخدم الكلمة الأساسية للقراءة في برنامج نصي لطلب بيانات من المستخدم الذي يقوم بتشغيل البرنامج النصي.
- استخدم الأمر استبدال لاستخدام نتيجة الأمر وتعيينه إلى متغير. على سبيل المثال ، يعرض تاريخ الأمر +٪ d-٪ m-٪ y التاريخ الحالي بالتنسيق-يوم-شهر-سنة. للقيام بذلك في برنامج نصي ، يمكنك استخدام TODAY = $ (التاريخ +٪ d-٪ m-٪ y) . لاستبدال الأوامر ، تحتاج فقط إلى وضع الأمر الذي تريد استخدامه بين الأقواس.
في القسم السابق الخاص بمعلمات الموضع ، تعلمت كيفية تعيين الوسائط للمتغيرات عند تشغيل برنامج نصي. في بعض الحالات ، قد يكون من الأفضل طلب المعلومات عندما تجد أن شيئًا ما مفقودًا. يظهر النص أدناه كيفية القيام بذلك.
سرد 3. نموذج البرنامج النصي باستخدام الأمر
القراءة
في البرنامج النصي في القائمة 3 ، يتم استخدام عامل التشغيل
... ... ... ... آخر ... لاختبار وجود وسيطة
$ 1 . يتم ذلك باستخدام
اختبار (الاختبار هو أمر منفصل). يمكن كتابة أمر الاختبار بطريقتين *:
اختبار أو
[...] . في المثال ، السطر
إذا تم تنفيذ [-z $ 1] ... لمشاهدة الاختبار (check)
-z $ 1 .
*
- في الواقع ثلاثة مصدر (تقريبا. المترجم)اختبار -z يتحقق إذا كان
$ 1 موجودًا أم لا. بمعنى آخر ، السطر
إذا كان [-z $ 1] يتحقق إذا كان
$ 1 فارغًا ، مما يعني أنه لم يتم توفير وسيطات عند تشغيل هذا البرنامج النصي. إذا كان الأمر كذلك ، يتم تنفيذ الأوامر بعد العبارة
ثم .
يرجى ملاحظة أنه عند كتابة أمر
الاختبار بأقواس مربعة ، من المهم استخدام مسافات بعد قوس الفتح وقبل قوس الإغلاق ، وبدون مسافات ، لن يعمل الأمر.
لاحظ أن العبارة
ثم يتبع
الاختبار مباشرة. هذا ممكن لأنه يتم استخدام فاصلة منقوطة (؛). الفاصلة المنقوطة هي فاصل أوامر ويمكن أن تحل محل سطر جديد في برنامج نصي.
تنفذ عبارة
then أمرين: أمر
echo ، الذي يعرض الرسالة على الشاشة ، وأمر
read .
يوقف أمر
القراءة البرنامج النصي بحيث يمكن معالجة إدخال المستخدم وتخزينه في متغير النص. لذلك ،
قراءة TEXT يضع كل إدخال المستخدم في متغير TEXT ، والذي سيتم استخدامه لاحقًا في البرنامج النصي.
يتم تمثيل الجزء التالي
ببيان آخر . يتم تنفيذ الأوامر بعد
العبارة الأخرى في جميع الحالات الأخرى ، وهو ما يعني في هذه الحالة "خلاف ذلك ، إذا تم توفير الوسيطة". إذا كان الأمر كذلك ، فسيتم تحديد متغير TEXT وتعيين القيمة الحالية
$ 1 لها.
لاحظ كيف يتم تعريف المتغير: مباشرة بعد اسم المتغير هناك علامة = متبوعة بـ $ 1. لاحظ أنه لا يجب أبدًا استخدام مسافات عند تحديد المتغيرات.
ثم ، إذا تم إغلاق الشروط باستخدام عامل التشغيل
fi . بعد اكتمال الشرط ، تعرف بالتأكيد أن المتغير TEXT تم تعريفه وله قيمة. يقرأ السطر قبل الأخير من البرنامج النصي قيمة المتغير TEXT ويقوم بتعيين هذه القيمة إلى STDOUT باستخدام الأمر
echo . لاحظ أنه لطلب القيمة الحالية للمتغير ، فإنه يشير إلى اسم المتغير ، بدءًا من علامة $ الموجودة أمامه.
يمكنك التدرب على استخدام هذا المثال عند العمل مع الإدخال.- افتح المحرر وقم بإنشاء ملف يسمى النص. أدخل محتويات الكود في القائمة 3 في هذا الملف.
- اكتب الملف على القرص وقم بتنفيذ نص chmod + x لجعله قابلاً للتنفيذ.
- قم بتشغيل البرنامج النصي عن طريق تشغيل. / النص وبدون وسيطات إضافية. سترى أنه يطلب إدخال.
- قم بتشغيل البرنامج النصي باستخدام " hello " كوسيطة (./text hello). سيتم عرض النتيجة "لقد قمت بإدخال hello text" في STDOUT.
باستخدام الظروف والحلقات
كما رأيت بالفعل ، يمكن استخدام العبارات الشرطية في برنامج نصي. يتم تنفيذ هذه العبارات الشرطية فقط إذا تم استيفاء شرط معين.
هناك العديد من العبارات الشرطية والحلقات في باش التي غالبا ما تستخدم.
- إذا ... ثم ... آخر - يستخدم لتنفيذ التعليمات البرمجية في حالة استيفاء شرط معين
- for - يستخدم لتنفيذ الأوامر لمجموعة من القيم
- بينما - يستخدم لتنفيذ التعليمات البرمجية في حالة استيفاء شرط معين
- قبل - تستخدم لتنفيذ التعليمات البرمجية حتى يتم استيفاء شرط معين
- الحالة - تستخدم لتقييم عدد محدود من القيم المحددة
إذا بعد ذلك آخر
إن إنشاء
if إذاً هو أمر شائع لتقييم الشروط المحددة. لقد رأيت بالفعل مثالاً معه. غالبًا ما يستخدم هذا البيان الشرطي مع أمر
الاختبار . يتيح لك هذا الأمر التحقق من العديد من الأشياء: على سبيل المثال ، ليس فقط ما إذا كان الملف موجودًا ، ولكن أيضًا مقارنة الملفات ومقارنة الأعداد الصحيحة والمزيد.
يمكنك معرفة المزيد عن الاختبار في المرجع باستخدام اختبار man command.
الأساسية
إذا كان بناء
إذا ... ثم ... فاي .
يقارن شرط واحد ، كما هو موضح في المثال التالي:
if [ -z $1 ] then echo no value provided fi
في القائمة 3 ، رأيت كيف يمكنك تقييم شرطين ، بما في ذلك الشرط
الآخر في التعبير. توضح القائمة 4 كيفية تقييم العديد من الشروط من
إذا إلى
آخر . هذا مفيد إذا كنت بحاجة إلى التحقق من العديد من القيم المختلفة.
لاحظ أن هذا المثال يستخدم أيضًا العديد من أوامر
الاختبار .
قائمة 4 . مثال مع
إذا بعد ذلك آخر
|| و &&
بدلاً من الكتابة كاملة
إذا ... عبارات ، يمكنك
حينئذٍ استخدام العوامل المنطقية
|| وكذلك
&& .
|| هو "OR" منطقي وسيتم تنفيذ الجزء الثاني من العبارة فقط إذا كان الجزء الأول غير صحيح ؛
&& هو منطقي "AND" وسيتم تنفيذ الجزء الثاني من العبارة فقط إذا كان الجزء الأول صحيحًا.
النظر في هذين الخطين: [ -z $1 ] && echo no argument provided
ping -c 1 8.8.8.8 2>/dev/null || echo node is not available
يتحقق المثال الأول لمعرفة ما إذا كان
$ 1 فارغًا أم لا. إذا كان هذا الاختيار صحيحًا (مما يعني في الأساس أن الأمر ينتهي برمز الخروج 0) ، فسيتم تنفيذ الأمر الثاني.
في المثال الثاني ،
يتم استخدام الأمر
ping للتحقق من توفر المضيف.
يستخدم هذا المثال منطقية "OR" لعرض النص "العقدة غير متوفرة" في حالة فشل أمر
ping .
ستجد ذلك غالبًا ، بدلاً من
العبارة الشرطية ،
&& & || . في التمرين التالي ، يمكنك التدرب على استخدام العبارات الشرطية باستخدام إما
إذا ... ثم ... آخر ، أو
&& و
|| .
ممارسة . باستخدام
إذا ... ثم ... آخرفي هذا التمرين ، ستعمل على برنامج نصي يتحقق من ملف وما هو الدليل.
- قم بتشغيل المحرر وإنشاء برنامج نصي يسمى filechk.
- انسخ محتويات القائمة 4 في هذا البرنامج النصي.
- قم بإجراء اختبارين معها ، مثل ./filechk / etc / hosts ، ./filechck / usr ، ./filechk غير موجود .
للحلقة
حلقة
for هو حل رائع لمعالجة نطاقات البيانات. في القائمة 5 ، يمكنك رؤية المثال الأول مع ، حيث يتم تحديد النطاق ومعالجته بينما توجد قيم خام في هذا النطاق.
ادراج 5
تبدأ حلقة
for for دائمًا بالكلمة الأساسية للكلمة الرئيسية ، متبوعة بشرط يجب التحقق منه. يتبع
ذلك الكلمة الأساسية "
do" ، تليها الأوامر التي يجب تنفيذها ، إذا كانت الحالة صحيحة ، تنتهي الحلقة باستخدام الكلمة الرئيسية التي تم
تنفيذها .
في المثال الوارد في القائمة 5 ، يمكنك أن ترى أن الشرط عبارة عن مجموعة من الأرقام بين قوسين تم تعيينهما لمتغير COUNTER.
شرح قليلايتم احتساب التعبيرات الحسابية
((...)) وإرجاع النتيجة. على سبيل المثال ، في الحالة الأبسط ، فإن البناء a = $ ((5 + 3)) سوف يعين المتغير "a" قيمة التعبير "5 + 3" ، أو 8. بالإضافة إلى ذلك ، تسمح الأقواس المزدوجة بالعمل مع المتغيرات في نمط اللغة C.
أولاً ، تتم تهيئة المتغير إلى 100 ، وطالما كانت القيمة أكبر من 1 ، يتم طرحها 1 في كل تكرار ، وطالما أن الشرط صحيح ، يتم عرض قيمة المتغير $ COUNTER باستخدام أمر
الارتداد .
في القائمة رقم 6 ، يمكنك رؤية أحد الخطوط المفضلة لدي من
أجل . يتم تعريف النطاق هذه المرة على أنه سلسلة من الأرقام ، بدءًا من 100 والوصول إلى 104.
قائمة 6 for i in {100..104}; do ping –c 1 192.168.4.$i >/dev/null && echo 192.168.4.$i is up; done
لاحظ كيف يتم تحديد النطاق: أولاً عليك تحديد الرقم الأول ، ثم نقطتين والإشارة إلى الرقم الأخير في النطاق. علاوة على ذلك ، مع
i في ، لكل من هذه الأرقام ،
يتم تعيين المتغير
i . يتم تعيين كل من هذه الأرقام للمتغير
i ثم يتم تنفيذ الأمر
ping ، حيث يضمن الخيار
-c 1 إرسال طلب واحد فقط.
لا تؤخذ نتيجة الأمر
ping في الاعتبار ، لذلك تتم إعادة توجيه الإخراج إلى / dev / null. بناءً على حالة مخرجات الأمر
ping ، يتم تنفيذ جزء من
&& التعبير. وبالتالي ، إذا كان المضيف متاحًا ، فسيتم عرض سطر يشير إلى أنه قيد التشغيل.
فهم بينما وحتى
إذا كانت العبارة for التي قرأتها للتو مفيدة للعمل مع نطاقات من العناصر ، فإن العبارة
بينما تكون مفيدة عندما تريد تتبع شيء مثل إمكانية الوصول إلى العملية. يوجد أيضًا بيان
حتى يتم تنفيذه طالما أن الشرط الذي يتم التحقق منه غير صحيح. في القائمة 7 ، يمكنك قراءة كيفية استخدام
الوقت لمراقبة نشاط العملية.
المذكرة. لم أفهم ما يفعله هذا البرنامج النصي. في حالتي ، يتم استخدام CentOS 7 وبشكل افتراضي لا يوجد جهاز عرض ، على الرغم من أن البرنامج النصي يقول بوضوح: الاستخدام: مراقبة <processname>
في مكان ما لمدة نصف ساعة ، غوغل برنامج رصد ل CetOS ، ولكن لم أجد ذلك. وعمومًا ، ليس من الواضح ما الشاشة الجانبية الموجودة هنا إذا تم استخدام ps aux. في أي حال ، لم أفهم ما يفعله هذا البرنامج النصي. طلب كبير للمساعدة في حل هذه المشكلة هو ضبط النص و / أو البرنامج النصي.
قائمة 7
يتكون البرنامج النصي في القائمة 7 من جزأين. أولا ، هناك
حلقة في حين . ثانياً ، هناك كل ما يجب القيام به عندما لا
يتم تقييم
حلقة الوقت على أنها صحيحة.
نواة
حلقة loop هي أمر
ps الذي تبلغ قيمته
$ 1 .
لاحظ استخدام
grep -v grep ، والذي يستبعد الأسطر التي تحتوي على
الأمر grep من النتيجة. تذكر أن الأمر
ps سيشمل جميع العمليات الجارية ، بما في ذلك
الأمر grep ، الذي يتم تمرير إخراج
الأمر ps إليه . هذا يمكن أن يؤدي إلى مباراة إيجابية كاذبة.
تتم إعادة توجيه إخراج الأمر
ps aux إلى / dev / tty11. يسمح لك هذا بقراءة النتائج من tty11 لاحقًا ، إذا لزم الأمر ، لكن لا يتم عرضها بشكل افتراضي.
تتبع العبارات أثناء الأوامر التي يجب تنفيذها إذا كان الشرط الذي يتم التحقق منه صحيحًا. في هذه الحالة ، يكون الأمر sleep 5 ، الذي يوقف تنفيذ البرنامج النصي مؤقتًا لمدة 5 ثوانٍ.في حين أن الشرط المشغل بينما صحيح، وتستمر الحلقة. إذا كانت الحالة خاطئة (مما يعني في هذه الحالة أن العملية لم تعد متوفرة) ، فستتوقف الدورة ويمكن تنفيذ الأوامر التالية.يجب أن تكون على دراية بجميع هذه الأوامر باستثناء آخر واحد. في سطر عناوين البريد الإلكتروني ، "توقفت العملية $ 1" عن الجذر <. يتم إرسال الرسالة إلى المستخدم الجذر باستخدام نظام البريد الداخلي ، والذي يعمل على نظام Linux * افتراضيًا. قيادة البريديأخذ الوسيطة الأولى موضوع الرسالة المحدد مع الخيار -s .* - على الأقل على CentOS يعمل بشكل افتراضي. (في. مترجم)انتبه إلى <. في نهاية الفريق.عادةً ، عند استخدام أمر mail في الوضع التفاعلي ، يتم فتح محرر يمكنك من خلاله كتابة نص الرسالة. هذا المحرر مغلق ويوفر خطًا له فترة فقط. في هذا الأمر ، يتم توفير نقطة عن طريق إعادة توجيه STDIN. يسمح ذلك بمعالجة الرسالة دون أي متطلبات إضافية لنشاط المستخدم.دورة في حين - على العكس من دورة حتى يتم إظهار مثال منها في سرد 8.حتى يبدأ التكرار الذي يستمر حتى يصبح الشرط صحيحًا.في القائمة رقم 8 ، يتم استخدامه لتصفية إخراج أمر المستخدمين من خلال حدوث $ 1 ، والذي سيكون اسم المستخدم. حتى يكون هذا الأمر صحيحًا ، يستمر التكرار. عندما يتم العثور على اسم المستخدم في إخراج المستخدمين التكرار مغلق، وبعد دورة حتى أوامر أخرى تشغيل.ادراج 8
فهم القضية
آخر حلقة تكرارية مهمة هي الحالة *. مشغل الحالة يستخدم لتقييم عدد من القيم المتوقعة. على وجه الخصوص ، تعتبر بيانات الحالة مهمة في البرامج النصية لبدء تشغيل Linux ، والتي تم استخدامها في الإصدارات السابقة لبدء تشغيل الخدمات.* - هل هي دورة؟في بيان الحالة ، تقوم بتعريف كل وسيطة ملموسة تتوقعها ، يتبعها الأمر الذي سيتم تنفيذه إذا تم استخدام هذه الوسيطة.في القائمة رقم 9 ، يمكنك رؤية بيان الحالة الذي تم استخدامه في إصدار سابق لتشغيل أي خدمة تقريبًا.قائمة 9 case "$1" in start) start;; stop) rm -f $lockfile stop;; restart) restart;; reload) reload;; status) status ;; *) echo "Usage: $0 (start|stop|restart|reload|status)" ;; esac
القضية لديها العديد من الميزات. يأتي أولاً السطر - الحالة بالتسلسل . يتبع ذلك قائمة بجميع القيم المحتملة التي تحتاج إلى تقييم. كل عنصر مغلق مع قوس ) .يتبع ذلك قائمة بالأوامر التي سيتم تنفيذها إذا تم استخدام وسيطة معينة. يتم إغلاق قائمة الأوامر بفاصلة منقوطة مزدوجة ؛؛ يمكن استخدامها مباشرة بعد الأمر الأخير ويمكن استخدامها في سطر منفصل.لاحظ أيضًا أن *) ينطبق على جميع المعلمات الأخرى غير المحددة مسبقًا. هذا هو المشغل الشامل. تنتهيحلقة تكرار الحالة ببيان esac .لاحظ أنه يتم تنفيذ التسلسل في الحالة بالترتيب. عند إجراء المطابقة الأولى ، لن يقيم بيان الحالة أي شيء.كجزء من التقييم ، يمكن استخدام قوالب مشابهة للقالب. هذا يظهر في *) تسلسل يطابق كل شيء. ولكن يمكنك أيضًا استخدام تسلسلات مثل start | Start | START) لمطابقة استخدام حالة أخرى .تصحيح البرامج النصية في Bash
عندما لا يقوم البرنامج النصي بما تتوقعه ، يكون من المفيد القيام ببعض التصحيح. للبدء ، حاول تنفيذ ذلك كوسيطة لأمر bash -x . سيوضح لك هذا الأمر سطراً ما يحاول البرنامج النصي القيام به ، بالإضافة إلى أخطاء محددة إذا لم يعمل كما يجب.تُظهر القائمة 10 مثالًا على استخدام bash -x ، حيث يصبح من الواضح على الفور أن أمر grep لا يعرف ما يجب القيام به ، لأن هناك وسيطة لتشغيله مفقودة. [root@server1 ~]
لتلخيص
في هذه المقالة ، تعلمت كيفية كتابة البرامج النصية shell. لقد نظرت إلى بعض الأمثلة وأصبحت الآن على دراية ببعض العناصر الأساسية اللازمة لإنشاء برنامج نصي ناجح.