قائمة الطعام
مجانا
التسجيل
الرئيسي  /  الملاحون/ التحكم في ubuntu من خلال برنامج نصي في windows. إنشاء برنامج نصي للتشغيل التلقائي عند بدء تشغيل الكمبيوتر

التحكم في ubuntu من خلال برنامج نصي في windows. إنشاء برنامج نصي للتشغيل التلقائي عند بدء تشغيل الكمبيوتر

اليوم سنتحدث عن البرامج النصية باش. هذه نصوص سطر أوامر مكتوبة لقشرة bash. هناك قذائف أخرى مثل zsh و tcsh و ksh ، لكننا سنركز على bash. هذه المادة مخصصة للجميع ، الشرط الوحيد هو القدرة على العمل في سطر أوامر Linux.



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

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

Pwd. من أنا
في الواقع ، إذا كنت قد جربته في الجهاز الطرفي ، فقد تمت كتابة أول نص برمجي يتضمن أمرين بالفعل. يعمل مثل هذا. أولاً ، يعرض الأمر pwd معلومات حول دليل العمل الحالي ، ثم يعرض الأمر whoami معلومات حول المستخدم الذي قمت بتسجيل الدخول بموجبه.

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

Getconf ARG_MAX
يعد سطر الأوامر أداة رائعة ، ولكن عليك إدخال الأوامر في كل مرة تحتاج إليها. ماذا لو كتبت مجموعة من الأوامر إلى ملف وقمت فقط باستدعاء هذا الملف لتنفيذها؟ في الواقع ، يُطلق على الملف الذي نتحدث عنه اسم برنامج نصي لسطر الأوامر.

كيف تعمل البرامج النصية باش

قم بإنشاء ملف فارغ باستخدام الأمر touch. في السطر الأول ، نحتاج إلى تحديد الغلاف الذي سنستخدمه. نحن مهتمون بـ bash ، لذا سيكون السطر الأول من الملف كالتالي:

#! / بن / باش
في سطور أخرى من هذا الملف ، يتم استخدام حرف التجزئة للإشارة إلى التعليقات التي لا تقوم الصدفة بمعالجتها. ومع ذلك ، فإن السطر الأول هو حالة خاصة ، وهنا تجزئة متبوعة بعلامة تعجب (يسمى هذا التسلسل shebang) ويشير المسار إلى bash للنظام إلى أن النص قد تمت كتابته من أجل bash.

يتم تحديد أوامر Shell باستخدام موجزات الأسطر ، ويتم تحديد التعليقات بعلامات التجزئة. هكذا تبدو:

#! / bin / bash # هذا تعليق pwd whoami
هنا ، وكذلك في سطر الأوامر ، يمكنك كتابة أوامر على سطر واحد ، مفصولة بفواصل منقوطة. ومع ذلك ، فإن كتابة الأوامر على أسطر منفصلة تجعل قراءة الملف أسهل. في أي حال ، سوف تقوم القشرة بمعالجتها.

تعيين أذونات ملف البرنامج النصي

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


محاولة تشغيل ملف نصي بأذونات تم تكوينها بشكل غير صحيح

لنجعل الملف قابلاً للتنفيذ:

Chmod + x ./myscript
الآن دعنا نحاول تنفيذه:

./myscript
بعد تعيين الأذونات ، كل شيء يعمل كما ينبغي.


تم تشغيل برنامج bash النصي بنجاح

عرض الرسائل

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

#! / bin / bash # تعليقنا هنا صدى "الدليل الحالي هو:" pwd echo "المستخدم الذي قام بتسجيل الدخول هو:" whoami
هذا ما يحدث بعد تشغيل البرنامج النصي المحدث.


عرض رسائل من برنامج نصي

يمكننا الآن طباعة الملاحظات التوضيحية باستخدام الأمر echo. إذا كنت لا تعرف كيفية تحرير ملف باستخدام أدوات Linux ، أو لم تر أمر echo من قبل ، فألق نظرة على هذا المورد.

استخدام المتغيرات

تسمح لك المتغيرات بتخزين المعلومات في ملف نصي ، على سبيل المثال ، نتائج الأوامر التي ستستخدمها الأوامر الأخرى.

لا حرج في تنفيذ الأوامر الفردية دون تخزين نتائج عملهم ، لكن إمكانيات هذا النهج محدودة للغاية.

هناك نوعان من المتغيرات التي يمكن استخدامها في نصوص bash:

  • متغيرات البيئة
  • متغيرات المستخدم

متغيرات البيئة

تحتاج أوامر shell أحيانًا إلى العمل مع بعض بيانات النظام. على سبيل المثال ، إليك كيفية عرض الدليل الرئيسي للمستخدم الحالي:

#! / bin / bash # display user home echo "Home for the current user is: $ HOME"
يرجى ملاحظة أنه يمكننا استخدام متغير النظام $ HOME في علامتي اقتباس مزدوجتين ، وهذا لن يمنع النظام من التعرف عليه. هذا ما يحدث إذا قمت بتشغيل البرنامج النصي أعلاه.


استخدام متغير البيئة في البرنامج النصي

ماذا لو كنت تريد عرض علامة الدولار على الشاشة؟ دعنا نجرب هذا:

صدى "لدي دولار واحد في جيبي"
يكتشف النظام علامة الدولار في السلسلة المقتبسة ويعتقد أننا أشرنا إلى متغير. سيحاول البرنامج النصي عرض قيمة المتغير غير المحدد $ 1. ليس هذا ما نريد. ماذا أفعل؟

يمكن أن يساعد حرف الهروب بالخط المائل العكسي قبل علامة الدولار في هذه الحالة:

صدى "لدي \ $ 1 في جيبي"
سينتج النص الآن ما هو متوقع بالضبط.


استخدام تسلسل الهروب لإخراج علامة الدولار

متغيرات المستخدم

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

كما هو الحال مع متغيرات النظام ، يمكن الوصول إلى متغيرات المستخدم باستخدام علامة الدولار:
TNW-CUS-FMP - رمز ترويجي لخصم 10٪ على خدماتنا ، متاح للتفعيل في غضون 7 أيام
#! / bin / bash # متغيرات الاختبار الصف = 5 شخص = "آدم" صدى "$ شخص ولد جيد ، إنه في الصف $"
هذا ما يحدث بعد تشغيل مثل هذا السيناريو.


المتغيرات المخصصة في البرنامج النصي

استبدال الأمر

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

ويمكن أن يتم ذلك بطريقتين.

  • مع backtick ""
  • باستخدام $ ()
باستخدام الطريقة الأولى ، تأكد من عدم استخدام علامة اقتباس واحدة بدلاً من العلامة الخلفية. يجب إرفاق الأمر برمزين من هذا القبيل:

Mydir = `pwd`
في الطريقة الثانية ، يتم كتابة نفس الشيء على النحو التالي:

Mydir = دولار (pwd)
والسيناريو ، في النهاية ، قد يبدو كالتالي:

#! / bin / bash mydir = $ (pwd) echo $ mydir
أثناء تشغيله ، سيتم حفظ إخراج الأمر pwd في متغير mydir ، وستنتقل محتوياته ، باستخدام الأمر echo ، إلى وحدة التحكم.


برنامج نصي يخزن نتائج أمر ما في متغير

عمليات رياضية

لإجراء عمليات حسابية في ملف نصي ، يمكنك استخدام بناء مثل $ ((a + b)):

#! / bin / bash var1 = $ ((5 + 5)) echo $ var1 var2 = $ (($ var1 * 2)) echo $ var2


العمليات الحسابية في البرنامج النصي

إذا ، ثم السيطرة على البناء

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

إذا ثم أمر fi بأوامر
وإليك مثال عملي:

#! / bin / bash if pwd ثم صدى "إنه يعمل" fi
في هذه الحالة ، إذا اكتمل الأمر pwd بنجاح ، فسيتم عرض النص "يعمل" في وحدة التحكم.

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

#! / bin / bash user = likegeeks إذا كان grep $ user / etc / passwd ثم صدى "The user $ user Exists" fi
هذا ما يحدث بعد تشغيل هذا البرنامج النصي.


ابحث عن مستخدم

استخدمنا هنا الأمر grep للعثور على المستخدم في ملف / etc / passwd. إذا لم تكن معتادًا على الأمر grep ، فيمكن العثور على وصفه.

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

بناء تحكم If-then-else

لكي يتمكن البرنامج من الإبلاغ عن كل من نتائج البحث الناجح والفشل ، سنستخدم بنية if-then-else. وإليك كيف يعمل:

إذا كان الأمر ثم أوامر else أوامر fi
إذا أعاد الأمر الأول صفرًا ، مما يعني أن تنفيذه بنجاح ، فسيكون الشرط صحيحًا ولن يتبع التنفيذ فرع else. خلاف ذلك ، إذا تم إرجاع شيء آخر غير الصفر ، مما يعني الفشل ، أو نتيجة خاطئة ، فسيتم تنفيذ الأوامر بعد الآخر.

لنكتب نصًا مثل هذا:

#! / bin / bash user = anotherUser if grep $ user / etc / passwd ثم صدى "المستخدم $ user Exists" else echo "المستخدم $ user غير موجود" fi
ذهب تنفيذها على طول الفرع الآخر.


تشغيل نص برمجي ببناء if-then-else

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

إذا كان command1 يأمر elif command2 ثم أوامر fi
إذا أرجع الأمر الأول صفرًا ، مما يشير إلى تنفيذه الناجح ، فسيتم تنفيذ الأوامر الموجودة في الكتلة الأولى ، وإلا ، إذا تبين أن الشرط الأول خاطئ ، وإذا كان الأمر الثاني يُرجع صفرًا ، فسيتم تنفيذ الكتلة الثانية من التعليمات البرمجية يعدم.

#! / bin / bash user = anotherUser if grep $ user / etc / passwd ثم صدى "The user $ user Exists" elif ls / home ثم صدى "المستخدم غير موجود ولكن على أي حال هناك دليل ضمن / home" fi
في مثل هذا البرنامج النصي ، يمكنك ، على سبيل المثال ، إنشاء مستخدم جديد باستخدام الأمر useradd إذا لم يُرجع البحث أي نتائج ، أو القيام بشيء آخر مفيد.

مقارنة الأرقام

يمكن مقارنة القيم الرقمية في البرامج النصية. يوجد أدناه قائمة بالأوامر ذات الصلة.
n1 -eq n2 تعطي النتيجة صحيحة إذا كانت n1 تساوي n2.
n1 -ge n2 تعطي النتيجة صحيحة إذا كانت n1 أكبر من أو تساوي n2.
n1 -gt n2 تعطي النتيجة صحيحة إذا كانت n1 أكبر من n2.
n1 -le n2 تعطي النتيجة صحيحة إذا كانت n1 أقل من أو تساوي n2.
n1 -lt n2 تعطي النتيجة صحيحة إذا كانت n1 أقل من n2.
n1 -ne n2 تعطي النتيجة صحيحة إذا كانت n1 لا تساوي n2.

لنجرب أحد عوامل المقارنة كمثال. لاحظ أن التعبير محاط بأقواس مربعة.

#! / bin / bash val1 = 6 إذا [$ val1 -gt 5] ثم صدى "قيمة الاختبار $ val1 أكبر من 5" صدى آخر "قيمة الاختبار $ val1 ليست أكبر من 5 بوصات fi
هذا ما سيخرجه هذا الأمر.


مقارنة الأرقام في النصوص

قيمة المتغير val1 أكبر من 5 ، ونتيجة لذلك ، يتم تنفيذ فرع عامل المقارنة ثم يتم عرض رسالة مقابلة على وحدة التحكم.

مقارنة السلاسل

يمكنك أيضًا مقارنة قيم السلسلة في البرامج النصية. تبدو عوامل المقارنة بسيطة جدًا ، لكن عمليات مقارنة السلاسل لها خصائص معينة سنتطرق إليها أدناه. هنا قائمة المشغلين.
str1 = str2 تختبر السلاسل من أجل المساواة ، وتعود صحيحًا إذا كانت السلاسل متطابقة.
s tr1! = str2 تعطي النتيجة صحيحة إذا لم تكن السلاسل متطابقة.
شارع 1< str2 Возвращает истину, если str1 меньше, чем str2 .
str1> str2 تعطي النتيجة صحيحة إذا كانت str1 أكبر من str2.
-n str1 تعطي النتيجة صحيحة إذا كانت str1 أكبر من الصفر.
-z str1 تعطي النتيجة صح إذا كان طول str1 يساوي صفر.

فيما يلي مثال لمقارنة السلاسل في نص برمجي:

#! / bin / bash user = "likegeeks" إذا كان [$ user = $ USER] ثم صدى "المستخدم $ المستخدم هو المستخدم الحالي المسجل الدخول" fi
نتيجة لتنفيذ البرنامج النصي ، حصلنا على ما يلي.


مقارنة السلاسل في النصوص

فيما يلي ميزة واحدة لمقارنة السلاسل تستحق الذكر. وهي عوامل التشغيل ">" و "<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>"كأمر إعادة توجيه الإخراج.

هكذا يبدو العمل مع هؤلاء المشغلين في الكود:

#! / bin / bash val1 = text val2 = "another text" إذا [$ val1 \>
ها هي نتائج البرنامج النصي.


مقارنة السلاسل ، إصدار تحذير

لاحظ أن النص ، على الرغم من تنفيذه ، يُنشئ تحذيرًا:

./myscript: سطر 5: [: وسيطات كثيرة جدًا
للتخلص من هذا التحذير ، ضع $ val2 بين علامتي اقتباس:

#! / bin / bash val1 = text val2 = "another text" إذا كان [$ val1 \> "$ val2"] ثم صدى "$ val1 أكبر من $ val2" else echo "$ val1 أقل من $ val2" fi
الآن كل شيء يعمل كما ينبغي.


مقارنة السلاسل

ميزة أخرى للمشغلين ">" و "<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:

Likegeeks likeegeeks
لنحفظه ، ونعطي الاسم myfile ، ثم ننفذ الأمر التالي في الجهاز:

فرز ملفي
سيقوم بفرز الأسطر من الملف مثل هذا:

Likegeeks Likegeeks
يقوم أمر الفرز ، افتراضيًا ، بفرز الأسطر بترتيب تصاعدي ، أي أن الحرف الصغير في مثالنا أصغر من الحرف الكبير. لنعد الآن نصًا يقارن نفس السلاسل:

#! / bin / bash val1 = Likegeeks val2 = likegeeks إذا كان [$ val1 \> $ val2] ثم صدى "$ val1 أكبر من $ val2" else echo "$ val1 أقل من $ val2" fi
إذا قمت بتشغيله ، اتضح أن العكس هو الصحيح - أصبح الحرف الصغير الآن أكبر من الحرف الكبير.


قم بفرز مقارنة الأوامر والسطر في ملف نصي

أوامر المقارنة تحتوي على أحرف كبيرة أقل. تتم مقارنة السلسلة هنا بمقارنة رموز أحرف ASCII ، وبالتالي يعتمد ترتيب الفرز على رموز الأحرف.

يستخدم أمر الفرز بدوره ترتيب الفرز المحدد في إعدادات لغة النظام.

عمليات فحص الملف

من المحتمل أن تكون الأوامر أدناه هي الأكثر استخدامًا في نصوص bash. إنها تسمح لك بالتحقق من الشروط المختلفة المتعلقة بالملفات. فيما يلي قائمة بهذه الأوامر.
-d file للتحقق مما إذا كان الملف موجودًا وأنه دليل.
-e file للتحقق مما إذا كان الملف موجودًا.
-f file للتحقق مما إذا كان الملف موجودًا وما إذا كان ملفًا.
-r file للتحقق مما إذا كان الملف موجودًا وقابل للقراءة.
-s file تحقق مما إذا كان الملف موجودًا وليس فارغًا.
-w file للتحقق مما إذا كان الملف موجودًا وقابل للكتابة.
-x file للتحقق مما إذا كان الملف موجودًا وقابل للتنفيذ.
file1 -nt file2 للتحقق مما إذا كان file1 أحدث من file2.
file1 -ot file2 للتحقق مما إذا كان file1 أقدم من file2.
-O file للتحقق مما إذا كان الملف موجودًا ومملوكًا للمستخدم الحالي.
-G file للتحقق مما إذا كان الملف موجودًا وما إذا كان معرف المجموعة الخاص به يطابق معرف المجموعة للمستخدم الحالي.

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

لنجرب أحد الأوامر عمليًا:

#! / bin / bash mydir = / home / likegeeks إذا [-d $ mydir] ثم صدى "دليل $ mydir موجود" cd $ mydir ls else echo "دليل $ mydir غير موجود" fi
هذا البرنامج النصي ، لدليل موجود ، سيعرض محتوياته.


عرض محتويات الدليل

نعتقد أنه يمكنك تجربة بقية الأوامر بنفسك ، فجميعها تنطبق بنفس الطريقة.

النتائج

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

اليوم سنتحدث عن البرامج النصية باش. هذه نصوص سطر أوامر مكتوبة لقشرة bash. هناك قذائف أخرى مثل zsh و tcsh و ksh ، لكننا سنركز على bash. هذه المادة مخصصة للجميع ، الشرط الوحيد هو القدرة على العمل في سطر أوامر Linux.



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

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

Pwd. من أنا
في الواقع ، إذا كنت قد جربته في الجهاز الطرفي ، فقد تمت كتابة أول نص برمجي يتضمن أمرين بالفعل. يعمل مثل هذا. أولاً ، يعرض الأمر pwd معلومات حول دليل العمل الحالي ، ثم يعرض الأمر whoami معلومات حول المستخدم الذي قمت بتسجيل الدخول بموجبه.

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

Getconf ARG_MAX
يعد سطر الأوامر أداة رائعة ، ولكن عليك إدخال الأوامر في كل مرة تحتاج إليها. ماذا لو كتبت مجموعة من الأوامر إلى ملف وقمت فقط باستدعاء هذا الملف لتنفيذها؟ في الواقع ، يُطلق على الملف الذي نتحدث عنه اسم برنامج نصي لسطر الأوامر.

كيف تعمل البرامج النصية باش

قم بإنشاء ملف فارغ باستخدام الأمر touch. في السطر الأول ، نحتاج إلى تحديد الغلاف الذي سنستخدمه. نحن مهتمون بـ bash ، لذا سيكون السطر الأول من الملف كالتالي:

#! / بن / باش
في سطور أخرى من هذا الملف ، يتم استخدام حرف التجزئة للإشارة إلى التعليقات التي لا تقوم الصدفة بمعالجتها. ومع ذلك ، فإن السطر الأول هو حالة خاصة ، وهنا تجزئة متبوعة بعلامة تعجب (يسمى هذا التسلسل shebang) ويشير المسار إلى bash للنظام إلى أن النص قد تمت كتابته من أجل bash.

يتم تحديد أوامر Shell باستخدام موجزات الأسطر ، ويتم تحديد التعليقات بعلامات التجزئة. هكذا تبدو:

#! / bin / bash # هذا تعليق pwd whoami
هنا ، وكذلك في سطر الأوامر ، يمكنك كتابة أوامر على سطر واحد ، مفصولة بفواصل منقوطة. ومع ذلك ، فإن كتابة الأوامر على أسطر منفصلة تجعل قراءة الملف أسهل. في أي حال ، سوف تقوم القشرة بمعالجتها.

تعيين أذونات ملف البرنامج النصي

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


محاولة تشغيل ملف نصي بأذونات تم تكوينها بشكل غير صحيح

لنجعل الملف قابلاً للتنفيذ:

Chmod + x ./myscript
الآن دعنا نحاول تنفيذه:

./myscript
بعد تعيين الأذونات ، كل شيء يعمل كما ينبغي.


تم تشغيل برنامج bash النصي بنجاح

عرض الرسائل

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

#! / bin / bash # تعليقنا هنا صدى "الدليل الحالي هو:" pwd echo "المستخدم الذي قام بتسجيل الدخول هو:" whoami
هذا ما يحدث بعد تشغيل البرنامج النصي المحدث.


عرض رسائل من برنامج نصي

يمكننا الآن طباعة الملاحظات التوضيحية باستخدام الأمر echo. إذا كنت لا تعرف كيفية تحرير ملف باستخدام أدوات Linux ، أو لم تر أمر echo من قبل ، فألق نظرة على هذا المورد.

استخدام المتغيرات

تسمح لك المتغيرات بتخزين المعلومات في ملف نصي ، على سبيل المثال ، نتائج الأوامر التي ستستخدمها الأوامر الأخرى.

لا حرج في تنفيذ الأوامر الفردية دون تخزين نتائج عملهم ، لكن إمكانيات هذا النهج محدودة للغاية.

هناك نوعان من المتغيرات التي يمكن استخدامها في نصوص bash:

  • متغيرات البيئة
  • متغيرات المستخدم

متغيرات البيئة

تحتاج أوامر shell أحيانًا إلى العمل مع بعض بيانات النظام. على سبيل المثال ، إليك كيفية عرض الدليل الرئيسي للمستخدم الحالي:

#! / bin / bash # display user home echo "Home for the current user is: $ HOME"
يرجى ملاحظة أنه يمكننا استخدام متغير النظام $ HOME في علامتي اقتباس مزدوجتين ، وهذا لن يمنع النظام من التعرف عليه. هذا ما يحدث إذا قمت بتشغيل البرنامج النصي أعلاه.


استخدام متغير البيئة في البرنامج النصي

ماذا لو كنت تريد عرض علامة الدولار على الشاشة؟ دعنا نجرب هذا:

صدى "لدي دولار واحد في جيبي"
يكتشف النظام علامة الدولار في السلسلة المقتبسة ويعتقد أننا أشرنا إلى متغير. سيحاول البرنامج النصي عرض قيمة المتغير غير المحدد $ 1. ليس هذا ما نريد. ماذا أفعل؟

يمكن أن يساعد حرف الهروب بالخط المائل العكسي قبل علامة الدولار في هذه الحالة:

صدى "لدي \ $ 1 في جيبي"
سينتج النص الآن ما هو متوقع بالضبط.


استخدام تسلسل الهروب لإخراج علامة الدولار

متغيرات المستخدم

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

كما هو الحال مع متغيرات النظام ، يمكن الوصول إلى متغيرات المستخدم باستخدام علامة الدولار:
TNW-CUS-FMP - رمز ترويجي لخصم 10٪ على خدماتنا ، متاح للتفعيل في غضون 7 أيام
#! / bin / bash # متغيرات الاختبار الصف = 5 شخص = "آدم" صدى "$ شخص ولد جيد ، إنه في الصف $"
هذا ما يحدث بعد تشغيل مثل هذا السيناريو.


المتغيرات المخصصة في البرنامج النصي

استبدال الأمر

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

ويمكن أن يتم ذلك بطريقتين.

  • مع backtick ""
  • باستخدام $ ()
باستخدام الطريقة الأولى ، تأكد من عدم استخدام علامة اقتباس واحدة بدلاً من العلامة الخلفية. يجب إرفاق الأمر برمزين من هذا القبيل:

Mydir = `pwd`
في الطريقة الثانية ، يتم كتابة نفس الشيء على النحو التالي:

Mydir = دولار (pwd)
والسيناريو ، في النهاية ، قد يبدو كالتالي:

#! / bin / bash mydir = $ (pwd) echo $ mydir
أثناء تشغيله ، سيتم حفظ إخراج الأمر pwd في متغير mydir ، وستنتقل محتوياته ، باستخدام الأمر echo ، إلى وحدة التحكم.


برنامج نصي يخزن نتائج أمر ما في متغير

عمليات رياضية

لإجراء عمليات حسابية في ملف نصي ، يمكنك استخدام بناء مثل $ ((a + b)):

#! / bin / bash var1 = $ ((5 + 5)) echo $ var1 var2 = $ (($ var1 * 2)) echo $ var2


العمليات الحسابية في البرنامج النصي

إذا ، ثم السيطرة على البناء

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

إذا ثم أمر fi بأوامر
وإليك مثال عملي:

#! / bin / bash if pwd ثم صدى "إنه يعمل" fi
في هذه الحالة ، إذا اكتمل الأمر pwd بنجاح ، فسيتم عرض النص "يعمل" في وحدة التحكم.

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

#! / bin / bash user = likegeeks إذا كان grep $ user / etc / passwd ثم صدى "The user $ user Exists" fi
هذا ما يحدث بعد تشغيل هذا البرنامج النصي.


ابحث عن مستخدم

استخدمنا هنا الأمر grep للعثور على المستخدم في ملف / etc / passwd. إذا لم تكن معتادًا على الأمر grep ، فيمكن العثور على وصفه.

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

بناء تحكم If-then-else

لكي يتمكن البرنامج من الإبلاغ عن كل من نتائج البحث الناجح والفشل ، سنستخدم بنية if-then-else. وإليك كيف يعمل:

إذا كان الأمر ثم أوامر else أوامر fi
إذا أعاد الأمر الأول صفرًا ، مما يعني أن تنفيذه بنجاح ، فسيكون الشرط صحيحًا ولن يتبع التنفيذ فرع else. خلاف ذلك ، إذا تم إرجاع شيء آخر غير الصفر ، مما يعني الفشل ، أو نتيجة خاطئة ، فسيتم تنفيذ الأوامر بعد الآخر.

لنكتب نصًا مثل هذا:

#! / bin / bash user = anotherUser if grep $ user / etc / passwd ثم صدى "المستخدم $ user Exists" else echo "المستخدم $ user غير موجود" fi
ذهب تنفيذها على طول الفرع الآخر.


تشغيل نص برمجي ببناء if-then-else

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

إذا كان command1 يأمر elif command2 ثم أوامر fi
إذا أرجع الأمر الأول صفرًا ، مما يشير إلى تنفيذه الناجح ، فسيتم تنفيذ الأوامر الموجودة في الكتلة الأولى ، وإلا ، إذا تبين أن الشرط الأول خاطئ ، وإذا كان الأمر الثاني يُرجع صفرًا ، فسيتم تنفيذ الكتلة الثانية من التعليمات البرمجية يعدم.

#! / bin / bash user = anotherUser if grep $ user / etc / passwd ثم صدى "The user $ user Exists" elif ls / home ثم صدى "المستخدم غير موجود ولكن على أي حال هناك دليل ضمن / home" fi
في مثل هذا البرنامج النصي ، يمكنك ، على سبيل المثال ، إنشاء مستخدم جديد باستخدام الأمر useradd إذا لم يُرجع البحث أي نتائج ، أو القيام بشيء آخر مفيد.

مقارنة الأرقام

يمكن مقارنة القيم الرقمية في البرامج النصية. يوجد أدناه قائمة بالأوامر ذات الصلة.
n1 -eq n2 تعطي النتيجة صحيحة إذا كانت n1 تساوي n2.
n1 -ge n2 تعطي النتيجة صحيحة إذا كانت n1 أكبر من أو تساوي n2.
n1 -gt n2 تعطي النتيجة صحيحة إذا كانت n1 أكبر من n2.
n1 -le n2 تعطي النتيجة صحيحة إذا كانت n1 أقل من أو تساوي n2.
n1 -lt n2 تعطي النتيجة صحيحة إذا كانت n1 أقل من n2.
n1 -ne n2 تعطي النتيجة صحيحة إذا كانت n1 لا تساوي n2.

لنجرب أحد عوامل المقارنة كمثال. لاحظ أن التعبير محاط بأقواس مربعة.

#! / bin / bash val1 = 6 إذا [$ val1 -gt 5] ثم صدى "قيمة الاختبار $ val1 أكبر من 5" صدى آخر "قيمة الاختبار $ val1 ليست أكبر من 5 بوصات fi
هذا ما سيخرجه هذا الأمر.


مقارنة الأرقام في النصوص

قيمة المتغير val1 أكبر من 5 ، ونتيجة لذلك ، يتم تنفيذ فرع عامل المقارنة ثم يتم عرض رسالة مقابلة على وحدة التحكم.

مقارنة السلاسل

يمكنك أيضًا مقارنة قيم السلسلة في البرامج النصية. تبدو عوامل المقارنة بسيطة جدًا ، لكن عمليات مقارنة السلاسل لها خصائص معينة سنتطرق إليها أدناه. هنا قائمة المشغلين.
str1 = str2 تختبر السلاسل من أجل المساواة ، وتعود صحيحًا إذا كانت السلاسل متطابقة.
s tr1! = str2 تعطي النتيجة صحيحة إذا لم تكن السلاسل متطابقة.
شارع 1< str2 Возвращает истину, если str1 меньше, чем str2 .
str1> str2 تعطي النتيجة صحيحة إذا كانت str1 أكبر من str2.
-n str1 تعطي النتيجة صحيحة إذا كانت str1 أكبر من الصفر.
-z str1 تعطي النتيجة صح إذا كان طول str1 يساوي صفر.

فيما يلي مثال لمقارنة السلاسل في نص برمجي:

#! / bin / bash user = "likegeeks" إذا كان [$ user = $ USER] ثم صدى "المستخدم $ المستخدم هو المستخدم الحالي المسجل الدخول" fi
نتيجة لتنفيذ البرنامج النصي ، حصلنا على ما يلي.


مقارنة السلاسل في النصوص

فيما يلي ميزة واحدة لمقارنة السلاسل تستحق الذكر. وهي عوامل التشغيل ">" و "<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>"كأمر إعادة توجيه الإخراج.

هكذا يبدو العمل مع هؤلاء المشغلين في الكود:

#! / bin / bash val1 = text val2 = "another text" إذا [$ val1 \>
ها هي نتائج البرنامج النصي.


مقارنة السلاسل ، إصدار تحذير

لاحظ أن النص ، على الرغم من تنفيذه ، يُنشئ تحذيرًا:

./myscript: سطر 5: [: وسيطات كثيرة جدًا
للتخلص من هذا التحذير ، ضع $ val2 بين علامتي اقتباس:

#! / bin / bash val1 = text val2 = "another text" إذا كان [$ val1 \> "$ val2"] ثم صدى "$ val1 أكبر من $ val2" else echo "$ val1 أقل من $ val2" fi
الآن كل شيء يعمل كما ينبغي.


مقارنة السلاسل

ميزة أخرى للمشغلين ">" و "<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:

Likegeeks likeegeeks
لنحفظه ، ونعطي الاسم myfile ، ثم ننفذ الأمر التالي في الجهاز:

فرز ملفي
سيقوم بفرز الأسطر من الملف مثل هذا:

Likegeeks Likegeeks
يقوم أمر الفرز ، افتراضيًا ، بفرز الأسطر بترتيب تصاعدي ، أي أن الحرف الصغير في مثالنا أصغر من الحرف الكبير. لنعد الآن نصًا يقارن نفس السلاسل:

#! / bin / bash val1 = Likegeeks val2 = likegeeks إذا كان [$ val1 \> $ val2] ثم صدى "$ val1 أكبر من $ val2" else echo "$ val1 أقل من $ val2" fi
إذا قمت بتشغيله ، اتضح أن العكس هو الصحيح - أصبح الحرف الصغير الآن أكبر من الحرف الكبير.


قم بفرز مقارنة الأوامر والسطر في ملف نصي

أوامر المقارنة تحتوي على أحرف كبيرة أقل. تتم مقارنة السلسلة هنا بمقارنة رموز أحرف ASCII ، وبالتالي يعتمد ترتيب الفرز على رموز الأحرف.

يستخدم أمر الفرز بدوره ترتيب الفرز المحدد في إعدادات لغة النظام.

عمليات فحص الملف

من المحتمل أن تكون الأوامر أدناه هي الأكثر استخدامًا في نصوص bash. إنها تسمح لك بالتحقق من الشروط المختلفة المتعلقة بالملفات. فيما يلي قائمة بهذه الأوامر.
-d file للتحقق مما إذا كان الملف موجودًا وأنه دليل.
-e file للتحقق مما إذا كان الملف موجودًا.
-f file للتحقق مما إذا كان الملف موجودًا وما إذا كان ملفًا.
-r file للتحقق مما إذا كان الملف موجودًا وقابل للقراءة.
-s file تحقق مما إذا كان الملف موجودًا وليس فارغًا.
-w file للتحقق مما إذا كان الملف موجودًا وقابل للكتابة.
-x file للتحقق مما إذا كان الملف موجودًا وقابل للتنفيذ.
file1 -nt file2 للتحقق مما إذا كان file1 أحدث من file2.
file1 -ot file2 للتحقق مما إذا كان file1 أقدم من file2.
-O file للتحقق مما إذا كان الملف موجودًا ومملوكًا للمستخدم الحالي.
-G file للتحقق مما إذا كان الملف موجودًا وما إذا كان معرف المجموعة الخاص به يطابق معرف المجموعة للمستخدم الحالي.

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

لنجرب أحد الأوامر عمليًا:

#! / bin / bash mydir = / home / likegeeks إذا [-d $ mydir] ثم صدى "دليل $ mydir موجود" cd $ mydir ls else echo "دليل $ mydir غير موجود" fi
هذا البرنامج النصي ، لدليل موجود ، سيعرض محتوياته.


عرض محتويات الدليل

نعتقد أنه يمكنك تجربة بقية الأوامر بنفسك ، فجميعها تنطبق بنفس الطريقة.

النتائج

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

يقدم PCloud لـ Linux تطبيق مزامنة لنظام التشغيل Linux كتطبيق (يتوفر أحدث إصدار). أدى حل السؤال البسيط المتعلق بأتمتة العملية "بدء العميل - المزامنة - إغلاق العميل" إلى الحاجة إلى حل العديد من المشكلات المتعلقة بخصائص عميل pCloud. الحل معطى لبيئة الرسوم البيانية xfce.

في النهاية ، أدى حل أتمتة العملية إلى إطلاق مهمتين أو ثلاث مهام وفقًا لجدول زمني (انظر).

بدء تشغيل عميل pCloud

يتم استخدام برنامج نصي بسيط لبدء تشغيل العميل ، على سبيل المثال pcloud1.sh

#! / بن / باش
/ path_to_file / pcloud

وأمر المهمة المخصصة هو

تصدير DISPLAY =: 0 && /path/pcloud1.sh

المسار - المسار إلى البرنامج النصي pcloud1.sh

في البداية ، لم تؤد إضافة خط الخروج إلى pcloud1.sh (إكمال pcloud1.sh) إلى النتيجة المرجوة. لوحظت عمليتان في مدير المهام:

Pcloud1.sh
sh -c export DISPLAY =: 0 && /path/pcloud1.sh

لمنع pcloud1.sh من "التعليق" في مدير المهام ، تم إنشاء البرنامج النصي pcloud2.sh ، وتم تشغيله وفقًا لجدول بعد دقيقة واحدة من بدء pcloud1.sh. البرنامج النصي هو "طلب" لإنهاء جميع العمليات الحالية المسماة pcloud1.sh

#! / بن / باش
killall -s مصطلح pcloud1.sh
النوم 1 && الخروج

إيقاف عميل pCloud

هذا السيناريو ، من وجهة نظر إنشائه ، كان الأكثر استهلاكا للوقت ، وهو ما يفسره سببان.

السؤال رقم 1.بدأ عمل العميل مصحوبًا بعدة عمليات. على سبيل المثال ، عند بدء تشغيل العميل ثم فتح جميع النوافذ تلقائيًا في مدير المهام ، يمكنك رؤية 6 عمليات pcloud:


بعد إغلاق نافذة العميل الرئيسية ومثيل مدير الملفات الذي يعرض محتوى السحابة pCloudDrive ، ستبقى 5 عمليات pcloud في مدير المهام:


نظرًا لعدم وجود أمر طرفي لإغلاق العميل ، يمكنك تطبيق الحل "soft" لإنهاء عملية pcloud من خلال قيمة pid ، أي باستخدام الأمر kill -15 pid_pcloud

ولكن إذا طلبت رقم pid لعملية pcloud ، فستكون النتيجة إما 6 مجموعات من الأرقام المقابلة لمربعات عمليات pcloud (مثال: 16129 16103 16077 16048 16036 16032) ، أو 5 مجموعات (مثال: 29419 29398 29352 29324 29320). ستتغير قيم معرف المنتج هذه في كل مرة.

يعتمد عدد العمليات (5 أو 6) على ما إذا كنت قد فتحت جميع النوافذ التي تفتح تلقائيًا عند بدء تشغيل العميل ، أو أن هذه النوافذ مغلقة وفقط رمز الحالة الموجود على حامل سطح المكتب (لوحة النظام ، الدرج) نشط.

يطرح سؤال طبيعي: ما هي العملية التي يجب إيقافها؟

السؤال 2.عند بدء تشغيل عميل pCloud ، يتم فتح نافذتين تلقائيًا ، أحدهما نافذة عميل ، والثاني هو مثيل لمدير الملفات المطابق للدليل المفتوح pCloudDrive ، ومحتواه هو محتوى مساحة سحابة حساب pCloud مثبتة فيه ، على سبيل المثال:



إذا اختفت نافذة العميل (الشكل العلوي) بعد إغلاق عميل pCloud ، فستظل النافذة الثانية مفتوحة. سيكون محتوى النافذة الثانية فارغًا ، نظرًا لعدم تحميل سحابة pCloud أثناء إيقاف تشغيل العميل.

سؤال: وكيف يتم اغلاقه بشكل آلي؟

ملحوظة. لم يتم طرح مسألة إغلاق نافذة تطبيق pCloud المفتوحة ، لأن الرمز الموجود على اللوحة (علبة النظام ، علبة النظام) في xfce يعرض فقط الحالة "المتزامنة" أو "المتزامنة". يتم عرض معلومات حول عدد الملفات التي تم تحميلها أو تنزيلها ، وكذلك سرعة العملية في الجزء السفلي من النافذة المفتوحة لتطبيق pCloud.

سنجيب على الأسئلة المطروحة بالتتابع.

الجواب 1.وجد تجريبياً أنه للخروج من عميل pcloud ، من الضروري إيقاف تشغيل عملية pcloud بأصغر قيمة pid ، والتي تتوافق مع عملية pCloud Drive (انظر مدير المهام). لذلك ، ستكون أصعب مهمة في الأتمتة هي اختيار أصغر pid من القيم التي تم الحصول عليها ، من أجل تخصيصها لمتغير لاحقًا.

كما اتضح ، يمكن حل هذه المشكلة بأربع طرق على الأقل. بالإضافة إلى ذلك ، يمكن إجراء الإغلاق "الناعم" لجميع عمليات pcloud باستخدام الأمر killall الذي يحدد اسم العملية. نظرًا لأن جميع الحلول ، والتي تم كتابة 5 منها ، تؤدي إلى نفس النتيجة ، فهي مدرجة أدناه.

الخيار 1: killall -s مصطلح pcloud

كل شيء واضح هنا. يتم إصدار أمر لإنهاء جميع عمليات pcloud.

الطرق الثلاث التالية هي سلسلة من العمليات المتسلسلة. أولاً ، يتم استرداد قيم pid لجميع مثيلات pcloud وكتابتها في ملف (على سبيل المثال ، pcloud.txt). محتوى الملف عبارة عن سلسلة من 5 أو 6 مجموعات من الأرقام (انظر الشرح أعلاه). ثم يتم "ضبط" المجموعة الأخيرة (5 أرقام) من السلسلة الناتجة لقيم pid وتعيينها إلى متغير (على سبيل المثال ، VAR). الخطوة الأخيرة هي تنفيذ الأمر kill -15 $ VAR ، وهو نفس تنفيذ kill -15 بأقل قيمة pid من ملف pcloud.txt.

2 ، 3 ، 4 خيارات:
pidof pcloud> ~ / pcloud.txt
VAR = `القط ~ / pcloud.txt | grep -o * $ `
قتل -15 دولار VAR

Pidof pcloud> ~ / pcloud.txt
VAR = `القط ~ / pcloud.txt | awk "(print $ NF)" `
قتل -15 دولار VAR

Pidof pcloud> ~ / pcloud.txt
VAR = `القط ~ / pcloud.txt | مراجعة | قطع -d "" -f 1 | مراجعة
قتل -15 دولار VAR

تم اقتراح المتغيرات من 1 إلى 4 من قبل مستخدمي منتدى Linuxmint.com.ru مع الأسماء المستعارة المائلة (2) و Chocobo (3 و 4) و demonlibra (1). وأنتهز هذه الفرصة ، أود أن أعرب مرة أخرى عن امتناني لهم.

الخيار 5

عند الحصول على قائمة عمليات pcloud pid بواسطة الأمر pgrep ، سيتم عرض النتيجة في ملف pcloud.txt في عمود ، أي سيتم وضع كل قيمة pid في سطر جديد بترتيب تصاعدي ، على سبيل المثال:

29320
29324
29352
29398
29419

الخطوة التالية هي تعيين قيمة السطر الأول من ملف pcloud.txt للمتغير.

Pgrep pcloud> ~ / pcloud.txt
VAR = `sed -n" 1p "~ / pcloud.txt`
قتل -15 دولار VAR

الجواب 2.على الرغم من البساطة الظاهرة للأمر لإغلاق نافذة Thunar النشطة باستخدام الأمر thunar -q (تم الحصول عليه بعد تنفيذ thunar - help في المحطة) ، إلا أنه لا يعمل في هذه الحالة.

بعد فحص شجرة العملية ، وجد أن هناك Thunar - daemon في قائمة العمليات النشطة:


هناك ثلاث طرق لإغلاق نافذة Thunar المفتوحة بواسطة عميل pCloud:

أ) قتل جميع عمليات Thunar النشطة killall -s TERM / usr / bin / Thunar ؛

ب) احصل على pid لعملية Thunar ، اكتبه إلى متغير وقم بإنهائه بأمر kill -15 variable_value

الإخراج = "$ (pidof / usr / bin / thunar)"
قتل -15 دولار (الإخراج)

ج) الحصول على pid من عملية Thunar ، وكتابته في ملف ، وتخصيص القيمة التي تم الحصول عليها من قراءة الملف وإنهائه باستخدام أمر kill -15 variable_value

بيدوف / usr / بن / ثونار> ~ / thunar.txt
VAR2 = `قطة ~ / thunar.txt`
قتل -15 $ VAR2

جميع الخيارات متساوية. نتيجة التنفيذ هو إنهاء عمليات Thunar --daemon و Thunar (يتوافق مع نافذة مفتوحة تحتوي على محتويات دليل pCloudDrive).

فيما يتعلق بمسألة "أهمية" عملية ثونار-ديمون في المنتدى الناطق باللغة الإنجليزية ، تم العثور على معلومات تفيد بأن هذا لا يؤثر بشكل كبير على وظائف ثونار والنظام ككل. العيب الوحيد هو أنه بدون هذه العملية ، سيتم تثبيت الوسائط القابلة للإزالة المتصلة (على سبيل المثال ، محرك أقراص فلاش) تلقائيًا فقط عند فتح نافذة Thunar. إذا لم يكن هناك مثيل لـ Thunar قيد التشغيل ، فلن يتم تحميل الوسائط القابلة للإزالة تلقائيًا. في هذه الحالة ، يجب عليك فتح Thunar وتركيبه يدويًا ، على سبيل المثال:


على أي حال ، بعد بدء النظام التالي ، سيتم إطلاق Thunar --daemon تلقائيًا


ما يحدده محتوى الملف

/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml (انظر - daemon)



إجمالاً ، يمكن أن يكون البرنامج النصي لإغلاق عميل pCloud (على سبيل المثال ، pcloud3.sh) من المحتوى التالي (يتم تحديد خيار واحد وطريقة واحدة):

#! / بن / باش
الخيار 1 ، 2 ، 3 ، 4 ، 5
النوم 5
الطريقة أ ، ب ، ج
النوم 5 && الخروج

تم تقديم الأمر 5 second pause slеep 5 لاختبار البرنامج النصي لمراقبة العمليات. لا يتعين عليك استخدامه في برنامج نصي يعمل.

عينة من مهمة cron المخصصة للمزامنة التلقائية اليومية لمدة 40 دقيقة مع سحابة pCloud من 21:40 إلى 22:20

40 21 * * * عرض عرض التصدير =: 0 && / home/user/Tools/scripts/pcloud1.sh
41 21 * * * /home/user/Tools/scripts/pcloud2.sh

إذا قصرنا أنفسنا فقط على البرامج النصية لبدء التشغيل والإيقاف ، أي pcloud1.sh و pcloud3.sh ، فيجب على البرنامج النصي pcloud3.sh إيقاف تشغيل pcloud مع عملية pid ليست الأصغر ، ولكن واحدة أخرى ، أي من تم الحصول على سلسلة من القيم ، على سبيل المثال ،

28354 28355 28359 28371 28399 28426 28449 28684 ,

يجب اختيار الثاني (28355). التفسير هو أن 28354 يتوافق مع البرنامج النصي النشط pcloud1.sh.

وفقًا لذلك ، في هذه الحالة ، سيتم استخدام الكود التالي لإيقاف عمليات pcloud:

Pgrep pcloud> ~ / pcloud.txt
VAR = `sed -n" 2p "~ / pcloud.txt`
قتل -15 دولار VAR

ثم تأخذ المهمة المخصصة النموذج ، على سبيل المثال:

40 21 * * * عرض عرض التصدير =: 0 && / home/user/Tools/scripts/pcloud1.sh
20 22 * ​​* * /home/user/Tools/scripts/pcloud3.sh

بادئ ذي بدء ، دعنا نلقي نظرة على ما هو النصيوما هو.

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

وبالمثل ، تتم كتابة البرامج النصية لأداء قائمة المهام التي يضعها المستخدم معًا (رمز) لجعلها أسهل وأسرع في نظام التشغيل. ليس من الضروري على الإطلاق أن يكون لديك تعليم مبرمج لكتابة نصوص بسيطة.

أولاً ، لنقم بإنشاء الأبسط البرنامج النصي شللتحديث النظام.

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

لذا ، افتح محرر نصوص جدتوأدخل الأحرف الأولى المطلوبة فيه تحت الاسم كوخ.
كوخفي البرمجة ، هو عبارة عن سلسلة من حرفين: علامة تجزئة وعلامة تعجب ( #! ) في بداية ملف البرنامج النصي. وإضافة إلى هذه الأحرف بدون مسافات / بن / ش- المترجم الذي سيتم تنفيذ النص فيه. / بن / ش- هذا عادة قذيفة بورنأو مترجم سطر أوامر متوافق ينجح "المسار / إلى / البرنامج النصي"كمعامل أول.
سيبدو السطر الأول المطلوب من البرنامج النصي كما يلي:

# أول برنامج نصي لترقية Ubuntu

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

sudo apt التحديث
sudo apt الترقية -y

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

هذا كل شئ. تم إنشاء نصك الأول. يجب أن يكون لديك شيء مثل الصورة:


يبقى حفظ الملف / البرنامج النصي الذي تم إنشاؤه وإعطائه اسممع التمديد المطلوب في النهاية - ... تمديد المخصصة للملف القابل للتنفيذ.
أعطيته اسم - update.shالادخار في المجلد الرئيسيالمستخدم:


لكي يكون الملف / البرنامج النصي الذي تم إنشاؤه قابلاً للتنفيذ ، يجب منحه إذنًا للقيام بذلك. ويمكن أن يتم ذلك بطريقتين.

1. قم بتشغيل الأمر التالي في المحطة:

sudo chmod + x update.sh

2. أو افتح مدير الملفات بتنسيق المجلد الرئيسي(حيث قمت بحفظ البرنامج النصي الذي تم إنشاؤه) ، انقر بزر الماوس الأيمن فوق الملف ، في قائمة السياق - خصائص - حقوقوتفعيل العنصر - أداء: اسمح للملف بالعمل كبرنامج:


لتنفيذ البرنامج النصي الذي تم إنشاؤه ، تحتاج إلى فتح Terminal (الذي كتبت عنه في بداية المقالة ، أن الجهاز هو سمة / أداة ضرورية لتنفيذ البرنامج النصي) ، أدخل ش، اسم البرنامج النصي مفصول بمسافة - update.shواضغط على المفتاح إدخال:


أو في المحطة ندخل شواسحب الملف الذي تم إنشاؤه باستخدام البرنامج النصي من مدير الملفات (مفصولاً أيضًا بمسافة):


بعد عرض مسار الملف بعد الأمر شومسافة ، فقط اضغط على المفتاح يدخل(أدخل) لتحديث النظام:


يمكنك الآن في أي وقت إجراء تحديث للنظام تم إنشاؤه بواسطة البرنامج النصي الخاص بك.

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

كتابة البرامج النصية في Linux (التعلم بالقدوة)

———————————————————————————-

1 المقدمة

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

لماذا هناك حاجة للنصوص
أولاً ، يتم تقليل إدارة خادم Linux ، بدرجة أو بأخرى ، إلى التنفيذ المنهجي لنفس الأوامر. وليس من الضروري أن يقوم شخص بتنفيذ هذه الأوامر. يمكن برمجتها ليتم تنفيذها بواسطة الآلة.
ثانيًا ، حتى مجرد تنفيذ مهمة شائعة ، والتي (فجأة) تصل إلى 20-1000 ... العمليات المتكررة أسهل بكثير في التنفيذ في البرنامج النصي.

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

كيف تكتب السيناريو
في حالتنا ، سيكون النص عبارة عن ملف نصي بسمات التنفيذ. إذا بدأ ملف البرنامج النصي بـ #! ، وهو ما يسمى sha-bang في عالم UNIX ، فإن هذا يخبر النظام عن المترجم الذي يجب استخدامه لتنفيذ البرنامج النصي. إذا كان من الصعب فهمها ، تذكر فقط أننا سنبدأ في كتابة جميع البرامج النصية بالضبط من السطر #! / Bin / bash أو #! / Bin / sh ، ثم ستتبع الأوامر والتعليقات عليها.

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

ما هي البرامج النصية التي قد نحتاجها:

    وضع قواعد جدار الحماية عند بدء تشغيل النظام.
    إجراء نسخ احتياطي للإعدادات والبيانات.
    إضافة صناديق بريد إلى خادم البريد (بشكل أكثر دقة إلى قاعدة بيانات mysql)
    الذي يطلق في وقت معين (يفضل كل ليلة) برنامجًا يقوم بمسح سجلات الخادم الوكيل ويقوم بإنشاء تقرير ويب مناسب عن مقدار حركة المرور التي تم تنزيلها.
    إرسال معلومات إلينا عبر البريد تفيد بأن شخصًا ما قد تمكن من الوصول إلى خادمنا عبر ssh ووقت الاتصال وعنوان العميل.

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

———————————————————————————-

2. تعلم كتابة البرامج النصية بلغة BASH الداخلية
الأصل: https://www.linuxconfig.org/Bash_scripting_Tutorial

يفترض هذا البرنامج التعليمي عدم وجود معرفة مسبقة بأساليب البرمجة النصية (البرمجة النصية) باستخدام لغة Bash الداخلية. مع هذا البرنامج التعليمي ، ستجد قريبًا أن البرمجة النصية مهمة سهلة للغاية. لنبدأ برنامجنا التعليمي بنص بسيط يخرج السلسلة "Hello World!" (في الترجمة من الإنجليزية - مرحبًا بالجميع!)

1. سيناريو "مرحبًا بالجميع"
هذا هو أول مثال على برنامج bash النصي:

#! / بن / باش
صدى "مرحبا العالم"

انتقل إلى الدليل الذي يحتوي على ملف hello_world.sh الخاص بنا واجعله قابلاً للتنفيذ:

الكود: حدد كل شيء $ chmod + x hello_world.sh

قم بتشغيل البرنامج النصي للتنفيذ

الكود: حدد الكل $ ./hello_world.sh

2. سكربت أرشفة بسيط

#! / بن / باش
tar -czf myhome_directory.tar.gz / home / user

الرمز: حدد الكل $ ./backup.sh

$ du -sh myhome_directory.tar.gz
41 م myhome_directory.tar.gz

3. العمل مع المتغيرات
في هذا المثال ، نعلن عن متغير بسيط ونطبعه على الشاشة باستخدام الأمر echo

#! / بن / باش
STRING = "HELLO WORLD !!!"
صدى $ STRING

الكود: حدد الكل $ ./hello_world.sh
مرحبا بالعالم !!!

نص الأرشفة الخاص بنا مع المتغيرات:

#! / بن / باش
OF = myhome_directory _ $ (التاريخ +٪ Y٪ m٪ d) .tar.gz
إذا = / المنزل / المستخدم
tar -czf $ OF $ IF

الرمز: حدد الكل $ ./backup.sh
tar: إزالة بادئة "\" من أسماء الأعضاء
$ du -sh * tar.gz
41 م myhome_directory_20100123.tar.gz

3.1 المتغيرات العالمية والمحلية

#! / بن / باش
# قم بتعريف متغير عالمي
# يمكن استخدام هذا المتغير في أي مكان في هذا البرنامج النصي
VAR = "متغير عام"
وظيفة باش (
# قم بتعريف متغير محلي
# مثل هذا المتغير صالح فقط للوظيفة التي تم التصريح بها
VAR المحلي = "متغير محلي"
صدى $ VAR
}
صدى $ VAR
سحق
# لاحظ أن المتغير العام لم يتغير
صدى $ VAR

الرمز: حدد الكل $ ./variables.sh
متغير عالمي
متغير محلي
متغير عالمي

4. تمرير الحجج للنص

#! / بن / باش
# استخدم المتغيرات المحددة مسبقًا للوصول إلى الوسائط
# عرض الحجج على الشاشة
صدى $ 1 $ 2 $ 3 '-> echo $ 1 $ 2 $ 3'

# يمكننا أيضًا الوصول إلى الوسائط من خلال المصفوفة الخاصة args = (“ [البريد الإلكتروني محمي]»)
# عرض الحجج على الشاشة
صدى $ (args) $ (args) $ (args) '-> args = (" [البريد الإلكتروني محمي]") ؛ صدى $ (args) $ (args) $ (args) '

# استخدم متغير [البريد الإلكتروني محمي]لإخراج جميع الحجج دفعة واحدة
صدى صوت [البريد الإلكتروني محمي]"-> صدى [البريد الإلكتروني محمي]

استخدم المتغير $ # لعرض عدد الوسائط التي تم تمريرها إلى البرنامج النصي
echo عدد الوسائط التي تم تمريرها: $ # ‘-> echo عدد الوسائط التي تم تمريرها: $ #’

الكود: حدد All $ ./arguments.sh Bash Scripting Tutoring
Bash Scripting Tutoring -> echo $ 1 $ 2 $ 3
برنامج Bash Scripting التعليمي -> args = (" [البريد الإلكتروني محمي]") ؛ echo $ (args) $ (args) $ (args)
Bash Scripting Tutoring -> echo [البريد الإلكتروني محمي]
عدد الوسائط التي تم تمريرها: 3 -> echo عدد الوسائط التي تم تمريرها: $ #

5. تنفيذ أوامر shell في البرنامج النصي

#! / بن / باش
# استخدم backticks "" "" لتنفيذ أمر shell
صدى "uname -o"
# الآن دعونا نحاول بدون اقتباسات
صدى uname -o

الكود: حدد الكل uname -o
جنو / لينكس
$ ./bash_backtricks.sh
جنو / لينكس
uname -o

كما ترى ، في الحالة الثانية ، تم عرض الأمر نفسه ، وليس نتيجة تنفيذه.

6. قراءة مدخلات المستخدم (التفاعلية)

#! / بن / باش
صدى صوت - "مرحبًا ، من فضلك اكتب الكلمة: \ c"
اقرأ كلمة
صدى "الكلمة التي أدخلتها هي: $ word"
صدى -e "هل يمكنك إدخال كلمتين من فضلك؟ "
قراءة word1 word2
صدى "هنا هو الإدخال الخاص بك: \" $ word1 \ "\" $ word2 \ ""
echo -e "ما هو شعورك حيال البرمجة النصية لـ bash؟ "
يقوم الأمر read # الآن بتخزين الرد في متغير الإنشاء الافتراضي $ REPLY
قرأ
صدى "لقد قلت $ REPLY ، يسعدني سماع ذلك! "
echo -e "ما هي ألوانك المفضلة؟ "
# -a يجعل الأمر قراءة للقراءة في مصفوفة
قراءة -الألوان
صدى "ألواني المفضلة هي أيضًا $ (ألوان) و $ (ألوان) و $ (ألوان) :-)"

الرمز: حدد الكل $ ./read.sh
مرحبًا ، من فضلك اكتب الكلمة: شيء ما
الكلمة التي أدخلتها هي: شيء ما
هل يمكنك إدخال كلمتين من فضلك؟
لينكس دبيان
ها هي إدخالك: "Debian" "Linux"
ما هو شعورك حيال البرمجة النصية باش؟
جيد
قلت حسنًا ، أنا سعيد لسماع ذلك!
ما هي ألوانك المفضلة؟
أزرق أخضر أسود
ألواني المفضلة هي الأزرق والأخضر والأسود :-)

7. استخدام الفخ

#! / بن / باش
# يعلنون عن فخ
فخ بشتراب INT
# امسح الشاشة
صافي؛
# يتم تنفيذ وظيفة الخطاف عندما يضغط المستخدم على CTRL-C:
# ستعرض الشاشة => تنفيذ روتين bash trap!
# لكن النص سيستمر في التنفيذ
بشتراب ()
{
صدى "تم اكتشاف CTRL + C! ... تنفيذ مصيدة باش!"
}
سيتم احتساب # برنامج نصي حتى 10
بالنسبة لـ `seq 1 10` ؛ فعل
صدى "$ a / 10 للخروج".
ينام 1 ؛
فعله
صدى "Exit Bash Trap Example !!!"

الرمز: حدد الكل $ ./trap.sh
1/10
2/10
3/10
4/10
5/10
6/10

7/10
8/10
9/10
تم اكتشاف CTRL + C! ... تنفيذ مصيدة باش!
10/10
مثال على الخروج من Bash Trap !!!

كما ترى ، فإن تركيبة المفاتيح Ctrl-C لم توقف تنفيذ البرنامج النصي.

8. المصفوفات
8.1 التصريح عن مصفوفة بسيطة

#! / بن / باش
# قم بتعريف مصفوفة بسيطة تحتوي على 4 عناصر
ARRAY = ("Debian Linux" "Redhat Linux" Ubuntu Linux)
# احصل على عدد العناصر في المصفوفة
العناصر = $ (# ARRAY [@])

# الإخراج في حلقة كل عنصر من عناصر المصفوفة
لـ ((أنا = 0 ؛ أنا<$ELEMENTS;i++)); do
صدى $ (ARRAY [$ (i)])
فعله

الرمز: حدد الكل $. / Arrays.sh
لينكس دبيان
ريدهات لينكس
أوبونتو
لينكس

8.2 قم بتعبئة المصفوفة بقيم من الملف

#! / بن / باش
# نعلن مجموعة
تعلن -a صفيف
# أمر Exec سيتم إنتاج # stdin (لوحة المفاتيح عادةً) من هذا الملف. هذا يجعل من الممكن القراءة
# محتويات الملف ، سطرًا بسطر ، وتحليل كل سطر تم إدخاله باستخدام sed و / أو awk.
إكسك 10 دع العد = 0

أثناء قراءة LINE<&10; do

ARRAY [$ count] = $ LINE
((العد ++))
فعله

صدى عدد العناصر: $ (# ARRAY [@])
# إخراج قيم الصفيف
صدى $ (ARRAY [@])
# أغلق الملف
تنفيذ 10> & -

الكود: حدد الكل $ cat bash.txt
لينكس دبيان
ريدهات لينكس
أوبونتو
لينكس
$ ./arrays.sh
عدد العناصر: 4
ديبيان لينكس ريدهات لينكس أوبونتو لينكس

9. شروط "إذا-ثم-خلاف ذلك"
9.1 الاستخدام البسيط لشروط "إذا كان غير ذلك"
انتبه للمسافات الموجودة بين قوسين مربعين ، والتي بدونها لن تعمل الحالة.

#! / بن / باش
الدليل = "./ BashScripting"

# تحقق مما إذا كان الدليل موجودًا
إذا [-d $ دليل]؛ من ثم
صدى "الدليل موجود"
آخر
صدى "الدليل غير موجود"
فاي

الرمز: حدد الكل $ ./if_else.sh
الدليل غير موجود
$ mkdir BashScripting
$ ./if_else.sh
الدليل موجود

9.2 شروط متداخلة إذا - خلاف ذلك

#! / بن / باش
# قم بتعريف متغير بالقيمة 4
الاختيار = 4
# عرض
صدى "1. باش "
صدى "2. البرمجة "
صدى "3. الدورة التعليمية "

# تنفيذ حتى المتغير أربعة
# التكرار
بينما [$ Choice -eq 4]؛ فعل

# قراءة مدخلات المستخدم
قراءة الاختيار
# متداخل شرط خلاف ذلك
إذا [$ Choice -eq 1]؛ من ثم

صدى "لقد اخترت كلمة: باش".

إذا [$ Choice -eq 2]؛ من ثم
صدى "لقد اخترت كلمة: برمجة"
آخر

إذا [$ Choice -eq 3]؛ من ثم
صدى "لقد اخترت كلمة: تعليمي"
آخر
صدى "الرجاء الاختيار بين 1-3!"
صدى "1. باش "
صدى "2. البرمجة "
صدى "3. الدورة التعليمية "
صدى-ن "الرجاء اختيار كلمة؟ "
الاختيار = 4
فاي
فاي
فاي
فعله

الرمز: حدد الكل $ ./nested.sh
1. باش
2. البرمجة النصية
3. البرنامج التعليمي

5

1. باش
2. البرمجة النصية
3. البرنامج التعليمي
الرجاء اختيار كلمة؟
4
يرجى الاختيار بين 1-3!
1. باش
2. البرمجة النصية
3. البرنامج التعليمي
الرجاء اختيار كلمة؟
3
لقد اخترت كلمة: تعليمي

وهكذا ، في البداية ، يتم تنفيذ جسم حلقة "while" ، منذ ذلك الحين الخيار المتغير يساوي في البداية أربعة. ثم نقرأ إدخال المستخدم فيه ، وإذا كان الإدخال لا يساوي 1.2 أو 3 ، فإننا نجعل متغيرنا يساوي 4 مرة أخرى ، فيما يتعلق بجسم الحلقة المتكرر (مرة أخرى ، من الضروري إدخال 1.2 أو 3).

10. المقارنات
10.1 المقارنات الحسابية

ملازم<
-Gt>
-le<=
-ge> =
-Eq ==
-واحد!

#! / بن / باش

NUM1 = 2
NUM2 = 2
إذا [$ NUM1 -eq $ NUM2] ؛ من ثم
صدى "كلا القيمتين متساويتان"
آخر
صدى "القيم غير متساوية"
فاي

الرمز: حدد الكل $ ./equals.sh
كلا القيمتين متساويتان

#! / بن / باش
# قم بتعريف المتغيرات بقيم عددية
NUM1 = 2
NUM2 = 3
إذا [$ NUM1 -eq $ NUM2] ؛ من ثم
صدى "كلا القيمتين متساويتان"
آخر
صدى "القيم غير متساوية"
فاي

الرمز: حدد الكل $ ./equals.sh
القيم ليست متساوية

#! / بن / باش
# قم بتعريف المتغيرات بقيم عددية
NUM1 = 2
NUM2 = 1
إذا [$ NUM1 -eq $ NUM2] ؛ من ثم
صدى "كلا القيمتين متساويتان"
أليف [$ NUM1 -gt $ NUM2] ؛ من ثم
صدى "$ NUM1 أكبر من $ NUM2"
آخر
صدى "$ NUM2 أكبر من $ NUM1"
فاي

الرمز: حدد الكل $ ./equals.sh
2 أكبر من 1

10.2 مقارنات نص رمزي

نفس الشيء
! = ليس نفس الشيء
< меньще чем
> أكثر من
-n s1 المتغير s1 ليس فارغًا
-z s1 المتغير s1 فارغ

#! / بن / باش

S1 = "باش"

S2 = "برمجة"
إذا [$ S1 = $ S2] ؛ من ثم

آخر
صدى "الجمل غير متساوية"
فاي

الرمز: حدد الكل $ ./statement.sh
السلاسل ليست متساوية

#! / بن / باش
# قم بتعريف المتغير الرمزي S1
S1 = "باش"
# قم بتعريف المتغير الرمزي S2
S2 = "باش"
إذا [$ S1 = $ S2] ؛ من ثم
صدى "كلا السلاسل متساوية"
آخر
صدى "الجمل غير متساوية"
فاي

الرمز: حدد الكل $ ./statement.sh
كلا الجملتين متساويتان

11. فحص الملفات

B filename Block ملف خاص
-c filename ملف الأحرف الخاصة
-d اسم الدليل تحقق من وجود الدليل
-e filename تحقق من وجود الملف
-f filename تحقق من وجود ملف عادي وليس دليلاً
-G filename تحقق مما إذا كان الملف موجودًا ومملوكًا لمعرف المجموعة الفعال.
-g filename صحيح إذا كان الملف موجودًا وهو set-group-id.
-k اسم الملف بت مثبت
-L اسم الملف ارتباط رمزي
-O filename صحيح إذا كان الملف موجودًا ويملكه معرف المستخدم الفعال.
-r filename تحقق مما إذا كان الملف يمكن قراءته
-S filename تحقق مما إذا كان الملف مقبس
-s filename تحقق مما إذا كان حجم الملف غير صفري
-u filename تحقق من تعيين بت معرف معرف الملف
-w filename تحقق مما إذا كان الملف قابلاً للكتابة
-x filename تحقق مما إذا كان الملف قابلاً للتنفيذ

#! / بن / باش
ملف = "./ ملف"
إذا [-e $ ملف] ؛ من ثم
صدى "الملف موجود"
آخر
صدى "الملف غير موجود"
فاي

الرمز: حدد الكل $ ls
file.sh
$ ./file.sh
الملف غير موجود
ملف $ touch
ليرة سورية
ملف file.sh
$ ./file.sh
الملف موجود

وبالمثل ، على سبيل المثال ، يمكننا استخدام حلقات "while" للتحقق مما إذا كان الملف غير موجود. سينام هذا البرنامج النصي بينما الملف غير موجود. لاحظ الناجي باش "!" الذي ينفي (يقلب) خيار e.

12. دورات
12.1. لحلقة

#! / بن / باش
# لحلقة
لـ f بـ $ (ls / var /) ؛ فعل
صدى $ و
فعله

تشغيل حلقة for من سطر أوامر bash:

الكود: حدد كل شيء $ لـ f بالدولار (ls / var /) ؛ فعل صدى $ f؛ الكود المنجز: حدد كل شيء $ لـ f بـ $ (ls / var /) ؛ فعل صدى $ f؛ فعله
النسخ الاحتياطية
مخبأ
يصطدم
ألعاب
ليب
محلي
قفل
سجل
بريد
يختار، يقرر
يركض
بكرة
tmp
www

12.2. حائط اللوب

#! / بن / باش
العدد = 6
# حائط اللوب
بينما [$ COUNT -gt 0] ؛ فعل

دع COUNT = COUNT-1
فعله

الكود: حدد الكل $ ./ while_loop.sh
قيمة العد: 6
قيمة العد: 5
قيمة العد: 4
قيمة العد: 3
قيمة العد: 2
قيمة العد: 1

12.3. حتى حلقة

#! / بن / باش
COUNT = 0
# حتى التكرار
حتى [$ COUNT -gt 5] ؛ فعل
صدى قيمة العد: COUNT دولار
دع COUNT = COUNT + 1
فعله

الرمز: حدد الكل $ ./until_loop.sh
قيمة العد: 0
قيمة العد: 1
قيمة العد: 2
قيمة العد: 3
قيمة العد: 4
قيمة العد: 5

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

#! / بن / باش
# سيبحث هذا البرنامج النصي عن المسافات ويزيلها
# في الملفات ، مع استبدالها بشرطة سفلية
DIR = "."
التحكم في حلقة بأمر read عن طريق إعادة توجيه الإخراج في حلقة.
اعثر على $ DIR -type f | أثناء قراءة الملف ؛ فعل
# استخدم فئة POSIX [: space:] للعثور على مسافات في أسماء الملفات
إذا [["$ file" = * [[: space:]] *]]؛ من ثم
# استبدال المسافات بالشرطات السفلية
mv "$ file" `echo $ file | tr '' _ "
فاي ؛
فعله

الرمز: حدد الكل $ ls -1
script.sh
touch $ "ملف به مسافات"
-1 ليرة سورية
ملف بمسافات
script.sh
$ ./script.sh
-1 ليرة سورية
file_with_spaces
script.sh

13. الوظائف

#! / بن / باش
يمكن الإعلان عن # وظائف بأي ترتيب
وظيفة function_B (
وظيفة الصدى B.
}
وظيفة function_A (
صدى 1 دولار
}
وظيفة function_D (
وظيفة صدى د.
}
وظيفة function_C (
صدى 1 دولار
}
# وظائف الاتصال
# تمرير المعلمة لوظيفة A
function_A "الوظيفة أ"
function_B
# تمرير المعلمة إلى الوظيفة C
function_C "الوظيفة ج".
function_D

الرمز: حدد الكل $ ./functions.sh
الوظيفة أ.
الوظيفة ب.
الوظيفة ج.
الوظيفة د.

14. اختيار المشغل - اختر

#! / بن / باش
PS3 = "اختر كلمة واحدة:"
# تحديد
حدد كلمة في "لينكس" "باش" "البرمجة النصية" "البرنامج التعليمي"
فعل
صدى "الكلمة التي اخترتها هي: $ word"
# إحباط ، وإلا فإن الحلقة ستكون لانهائية.
فترة راحة
فعله
خروج 0

الرمز: حدد الكل $ ./select.sh
1) لينكس
2) باش
3) البرمجة النصية
4) البرنامج التعليمي
اختر كلمة واحدة: 4
الكلمة التي اخترتها هي: تعليمي

15. المشغل المختار - الحالة

#! / بن / باش
صدى "ما هي لغة البرمجة / البرمجة النصية المفضلة لديك"
صدى "1) باش"
صدى "2) بيرل"
صدى "3) فيتون"
صدى "4) c ++"
صدى "5) لا أعرف!"
قراءة الحالة
# هيكل اختيار حالة بسيط
# لاحظ أن $ case في هذا المثال هي مجرد متغير
# وليس من الضروري أن يسمى ذلك. هذا مجرد مثال
حالة $ حالة في
1) صدى "اخترت bash" ؛؛
2) صدى "اخترت بيرل" ؛؛
3) صدى "لقد اخترت فيتون" ؛؛
4) صدى "لقد حددت c ++" ؛؛
5) الخروج
esac

الرمز: حدد الكل $ ./case.sh
ما هي لغة البرمجة / البرمجة النصية المفضلة لديك
1) باش
2) بيرل
3) فيتون
4) سي ++
5) لا أعرف!
4
لقد حددت c ++

———————————————————————————-

يمكن الحصول على مزيد من المعلومات من مصادر مختلفة ، على سبيل المثال من هنا
الأصل: https://www.linuxconfig.org/Bash_scripting_Tutorial
https://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/
https://bug.cf1.ru/2005-03-17/programmin ... -book.html

https://ubuntologia.ru/forum/viewtopic.php؟f=109&t=2296