9 أمثلة على الحلقات في نصوص لينكس باش

نشرت: 2022-08-19
سطر أوامر Linux على كمبيوتر محمول على خلفية زرقاء.
fatmawati achmad zaenuri / Shutterstock.com

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

الحلقة

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

9 أمثلة على Bash Script لتبدأ في نظام Linux
ذات الصلة 9 أمثلة على Bash Script لتبدأ على Linux

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

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

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

بسيطة للحلقات

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

للحلقات باستخدام القوائم العددية

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

 ل i في 1 2 3 4 5 ؛ هل صدى $ i؛ فعله 

a من أجل حلقة العد من 1 إلى 5

من المهم أن نلاحظ هنا أن المتغير i يزداد بمقدار واحد في كل مرة تدور فيها الحلقة ، ولكن هذا لأن قائمة الأرقام ترتفع بمقدار واحد في كل مرة.

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

 لأني في 3 5 7 9 11 44 ​​؛ هل صدى $ i؛ فعله 

a حلقة العد من خلال قائمة غير متسلسلة من الأرقام

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

ولا يلزم أن تكون الأرقام بترتيب تصاعدي. يمكن أن تكون بأي ترتيب.

 لأني في 3 43 44 11 9 ؛ هل صدى $ i؛ فعله 

a for حلقة العد من خلال قائمة غير مرتبة من الأرقام

للتكرار باستخدام قوائم الكلمات

يمكننا أن نفعل الشيء نفسه بسهولة مع الكلمات. انسخ نص البرنامج النصي في محرر واحفظه باسم "word-list.sh."

 #! / بن / باش

للكلمة في هذه سلسلة من الكلمات
فعل 
  صدى كلمة دولار
فعله

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

 chmod + x word-list.sh 

جعل نص قابل للتنفيذ مع chmod

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

 ./word-list.sh 

حلقة for تعمل من خلال قائمة الكلمات

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

للحلقات ذات النطاقات الرقمية

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

هذا البرنامج النصي هو "number-range.sh."

 #! / بن / باش

بالنسبة إلى i في {1..10}
فعل
  صدى "Loop spin:" $ i
فعله

يتم تحديد نطاق الأرقام داخل الأقواس المتعرجة " {} " بنقطتين " .. " تفصل بين الأرقام التي تبدأ وتنتهي النطاق. تأكد من عدم تضمين أي مسافات بيضاء في تعريف النطاق.

هذه هي الطريقة التي تعمل بها:

 ./number-range.sh 

حلقة for باستخدام نطاق رقمي

يمكنك تضمين رقم آخر يحدد حجم الخطوة الذي يجب أن يستخدمه المكرر للتنقل عبر الأرقام الموجودة في النطاق. سيستخدم هذا البرنامج النصي "number-range2.sh" نطاقًا من 0 إلى 32 وحجم خطوة من 4.

 #! / بن / باش

لـ i في {0..32..4}
فعل
  صدى "Loop spin:" $ i
فعله

يخطو المكرر عبر نطاق الأرقام في قفزات من أربعة.

 ./number-range2.sh 

حلقة for باستخدام مكرر الخطوة 4

للتكرار باستخدام أسماء الملفات

نظرًا لأنه يمكننا معالجة قوائم الكلمات ، يمكننا جعل البرامج النصية تعمل مع أسماء الملفات. يسمى هذا البرنامج النصي "filenames.sh."

 #! / بن / باش

للملف في word-list.sh number-range.sh number-range2.sh filenames.sh
فعل
  ls -lh "$ file"
فعله

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

 ./filenames.sh 

حلقة for باستخدام قائمة بأسماء الملفات

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

يسمى هذا البرنامج النصي "filenames2.sh." لقد استبدلنا قائمة أسماء الملفات بنمط اسم الملف "* .sh" للحصول على تقرير البرنامج النصي عن جميع ملفات البرامج النصية في الدليل الحالي.

 #! / بن / باش

للملف في * .sh
فعل
  ls -lh "$ file"
فعله

ها هو الناتج.

 ./filenames2.sh 

حلقة for باستخدام نمط ملف * .sh

للحلقات باستخدام معلمات سطر الأوامر

يمكننا إضافة المزيد من المرونة عن طريق تمرير نمط اسم الملف في سطر الأوامر. يمثل المتغير $* جميع معلمات سطر الأوامر التي تم تمريرها إلى البرنامج النصي.

هذا هو "filenames3.sh."

 #! / بن / باش

للملف بالدولار *
فعل
  ls -lh "$ file"
فعله

سنطلب أسماء الملفات التي تبدأ بـ "n" ولها امتداد SH.

 ./filenames3.sh n * .sh 

حلقة for تأخذ نمط ملف كمعامل سطر أوامر

يمكننا أيضًا تمرير أكثر من نمط واحد في كل مرة.

 ./filenames3.sh n * .sh .bashrc 

حلقة for تأخذ نمط ملف ومعلمات سطر أوامر اسم الملف

يأخذ file متغير المكرر قيمة كل معلمة من معلمات سطر الأوامر. يتم توسيع أنماط اسم الملف ، وتتم معالجة كل أسماء الملفات في نص الحلقة.

ذات صلة: كيفية العمل مع المتغيرات في Bash

C- مثل الحلقات

يدعم Bash مصطلح for loop الكلاسيكي المكون من ثلاثة مصطلحات ، مثل تلك الموجودة في لغة البرمجة C. يطلق عليهم اسم حلقات for ذات ثلاث حدود لأن هناك ثلاثة شروط في رأس الحلقة.

  • القيمة الأولية لمكرر الحلقة.
  • اختبار ما إذا كانت الحلقة تستمر أم تنتهي.
  • الزيادة - أو التناقص - للمكرر.

هذا البرنامج النصي هو "c-like.sh."

يتم تعيين المكرر I على 1 في بداية الحلقة ، وستعمل الحلقة طالما كانت العبارة ” i<=10 ” صحيحة. بمجرد i إلى 11 ، ستتوقف الحلقة for . يتم زيادة المكرر بمقدار واحد ، كل ثورة في الحلقة.

 #! / بن / باش

لـ ((i = 1 ؛ i <= 10 ؛ i ++))
فعل 
  صدى "رقم الحلقة:" $ i
فعله

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

 ./c-like.sh 

ثلاثة فصول أو C-like loop

يسمح C-like for loop بالإنشاء السهل لحلقات for التي لها متطلبات غريبة بعض الشيء. تبدأ هذه الحلقة من 15 ، وتحسب للخلف بخطوات 3. وهذه هي "c-like2.sh"

 #! / بن / باش

لـ ((i = 15 ؛ i> 0 ؛ i- = 3))
فعل 
  صدى "رقم الحلقة:" $ i
فعله

عندما نقوم بتشغيله ، يجب أن يقفز للخلف في خطوات من ثلاثة.

 ./c-like2.sh 

حلقة C تشبه العد التنازلي

لانهائي للحلقات

يمكنك أيضًا استخدام تنسيق for loop هذا لإنشاء حلقة لا نهائية. كل ما عليك فعله هو إزالة جميع العناصر من رأس الحلقة ، مثل هذا. هذا هو "infinite.sh."

 #! / بن / باش

إلى عن على (( ؛ ؛ ))
فعل
  صدى "اضغط على Ctrl + C للإيقاف ..."
  النوم 1
فعله

ستحتاج إلى الضغط على Ctrl + C لإيقاف الحلقة.

 ./infinite.sh 

حلقة لا نهائية على شكل حرف C

للتكرار باستخدام مصفوفات الكلمات

يمكننا التكرار بسهولة من خلال مجموعة من الكلمات. نحتاج إلى توفير اسم المصفوفة في رأس الحلقة ، وسيمر المكرر عبر جميع المدخلات في المصفوفة. هذا هو "word-array.sh."

 #! / بن / باش

التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

للتوزيعات في $
فعل
  صدى $ توزيعة
فعله

يتم سرد جميع التوزيعات بالنسبة لنا.

 ./word-array.sh 

حلقة for باستخدام مصفوفة كلمات

قيادة الاستمرار

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

هذا هو "word-array2.sh." يتخطى إدخال المصفوفة "Arch" ولكنه يعالج جميع أعضاء المصفوفة الآخرين.

 #! / بن / باش

التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

للتوزيعات في $
فعل
  إذا [["$ distro" == "قوس"]] ؛
    ومن بعد
    استمر
  فاي
  صدى $ توزيعة
فعله

"القوس" لا يظهر في نافذة المحطة.

 ./word-array2.sh 

حلقة for تتخطى إدخالاً في مصفوفة كلمات بسبب أمر المتابعة

أمر القطع

يخرج الأمر break من الحلقة ويمنع المزيد من المعالجة.

هذا هو "word-array3.sh." إنه نفس البرنامج النصي السابق مع استبدال " continue " break .

 #! / بن / باش

التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

للتوزيعات في $
فعل
  إذا [["$ distro" == "قوس"]] ؛
    ومن بعد
    فترة راحة
  فاي
  صدى $ توزيعة
فعله

عندما يحتوي المكرر على "Arch" ، تتخلى حلقة for عن أي معالجة أخرى.

 ./word-array3.sh 

تتخلى حلقة for عن معالجة إضافية بسبب أمر break

للحلقات باستخدام المصفوفات الترابطية

في Bash 4 والإصدارات الأحدث ، تسمح لك المصفوفات الترابطية بإنشاء قوائم بأزواج القيمة الرئيسية التي يمكن البحث عنها بواسطة المفتاح أو القيمة. بسبب العلاقة ثنائية الاتجاه بين المفتاح والقيمة ، يطلق عليهم أيضًا قواميس البيانات.

ما هي قواميس باش على لينكس وكيف تستخدمها؟
ذات صلة ما هي قواميس Bash على نظام Linux وكيف تستخدمها؟

يمكننا التكرار من خلال مصفوفة ترابطية باستخدام حلقة for . هذا البرنامج النصي هو "Associative.sh". تحدد مصفوفة ترابطية بها أربعة مداخل ، واحدة لكل من "الكلب" و "القط" و "روبن" و "الإنسان". هذه هي المفاتيح. القيم هي عدد الأرجل (الافتراضي) لكل منها.

 #! / بن / باش

أعلن -A حيوانات = ([كلب] = أربع أرجل [قطة] = أربع أرجل [روبن] = ذات رجلين [إنسان] = ذات رجلين)

للأرجل في $ {! الحيوانات [@]}
فعل
  إذا [$ {حيوانات [$ Leg]} == "ذات رجلين"]؛ ومن بعد 
    صدى $ {أرجل}
  فاي
فعله

مكرر يسمى legs . لاحظ أن رأس الحلقة يحتوي على " ! " علامة تعجب. هذا لا يعمل كعامل NOT المنطقي ، إنه جزء من بناء جملة الصفيف الترابطي. مطلوب للبحث من خلال المصفوفة.

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

 ./associative.sh 

استخدام حلقة for لاستخراج العناصر من مصفوفة ترابطية

التكرار على إخراج الأوامر

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

هذا البرنامج النصي هو "command.sh." يستخدم ls و wc لتوفير قائمة مرتبة بأسماء ملفات البرامج النصية ، جنبًا إلى جنب مع عدد الأسطر والكلمات والبايت.

 #! / بن / باش

لـ i بـ $ (ls * .sh | Sort) ؛
فعل 
  صدى $ (wc $ i)
فعله

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

 ./command.sh 

استخدام حلقة for للتكرار على إخراج أمرين من الأنابيب

ذا دازلينج فور لوب

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

كيفية معالجة ملف سطر بسطر في برنامج Linux Bash Script
ذات صلة كيفية معالجة ملف سطر بسطر في برنامج Linux Bash

حلقة while ، على سبيل المثال ، أكثر ملاءمة لأشياء معينة من حلقة for ، مثل قراءة الأسطر من ملف.

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