9 أمثلة على الحلقات في نصوص لينكس باش
نشرت: 2022-08-19 تقوم Bash for
loop متعددة الاستخدامات بأكثر من مجرد حلقة حول عدد معين من المرات. نحن نصف متغيراته العديدة حتى تتمكن من استخدامها بنجاح في نصوص Linux الخاصة بك.
الحلقة
جميع لغات البرمجة النصية والبرمجة لديها طريقة ما للتعامل مع الحلقات. الحلقة هي جزء من التعليمات البرمجية التي تريد تنفيذها بشكل متكرر. بدلاً من كتابة نفس مجموعة التعليمات في البرنامج النصي الخاص بك ، ستكرر الحلقة مقطعًا واحدًا من التعليمات البرمجية مرارًا وتكرارًا نيابة عنك.
حلقة Bash for
مرنة للغاية. يمكن أن يعمل مع الأرقام أو الكلمات أو المصفوفات أو متغيرات سطر الأوامر أو إخراج أوامر أخرى. يتم استخدام هذه في رأس الحلقة. يحدد الرأس ما تعمل الحلقة - الأرقام أو السلاسل ، على سبيل المثال - وما هو شرط النهاية الذي سيوقف التكرار.
يحتوي جسم الحلقة على الكود الذي تريد تكراره. إنه يحمل ما تريد أن تفعله الحلقة. يمكن أن يحتوي نص الحلقة على أي أمر برنامج نصي صالح.
يتم استخدام متغير يسمى عداد الحلقة أو المكرر للدخول إلى نطاق من القيم أو قائمة عناصر البيانات. لكل حلقة ، يأخذ المكرر قيمة الرقم أو السلسلة التالية أو أي نوع بيانات تتكرر الحلقة. يسمح هذا للحلقة بالعمل مع قيم كل عنصر من عناصر البيانات بدورها ، أو حتى في بعض الحالات لمعالجة عناصر البيانات نفسها.
بسيطة للحلقات
إذا كنت تتطلع إلى كتابة أول حلقة for ، فستساعدك هذه الأمثلة البسيطة على البدء.
للحلقات باستخدام القوائم العددية
يمكنك تشغيل حلقة for
في سطر الأوامر. يقوم هذا الأمر بإنشاء وتنفيذ حلقة for
بسيطة. المكرر هو متغير يسمى i
. سنقوم بتعيين i
ليكون كل من القيم الموجودة في قائمة الأرقام ، بدوره. سيقوم جسم الحلقة بطباعة هذه القيمة إلى النافذة الطرفية. الشرط الذي ينهي هذه الحلقة هو عندما i
بالتكرار عبر قائمة الأرقام بأكملها.
ل i في 1 2 3 4 5 ؛ هل صدى $ i؛ فعله
من المهم أن نلاحظ هنا أن المتغير i
يزداد بمقدار واحد في كل مرة تدور فيها الحلقة ، ولكن هذا لأن قائمة الأرقام ترتفع بمقدار واحد في كل مرة.
تبدأ قائمة الأرقام هذه بالرقم 3 وترتفع بخطوتين من اثنين ، ثم تقفز بشكل تعسفي إلى 44.
لأني في 3 5 7 9 11 44 ؛ هل صدى $ i؛ فعله
لا فرق في حلقة for
. يبدأ في أحد طرفي القائمة ويستخدم كل قيمة بدورها ، حتى يتم استخدام جميع القيم الموجودة في القائمة.
ولا يلزم أن تكون الأرقام بترتيب تصاعدي. يمكن أن تكون بأي ترتيب.
لأني في 3 43 44 11 9 ؛ هل صدى $ i؛ فعله
للتكرار باستخدام قوائم الكلمات
يمكننا أن نفعل الشيء نفسه بسهولة مع الكلمات. انسخ نص البرنامج النصي في محرر واحفظه باسم "word-list.sh."
#! / بن / باش للكلمة في هذه سلسلة من الكلمات فعل صدى كلمة دولار فعله
ستحتاج إلى استخدام chmod
لجعل النص البرمجي قابلاً للتنفيذ وأي نص برمجي آخر تنسخه من هذه المقالة. فقط استبدل اسم البرنامج النصي في كل مرة تستخدم فيها الأمر chmod
.
chmod + x word-list.sh
لنقم بتشغيل البرنامج النصي.
./word-list.sh
تمامًا كما فعلت مع الأرقام ، فإن المكرر - في هذا المثال ، word
المتغيرة - يشق طريقه عبر قائمة عناصر البيانات حتى يصل إلى نهاية القائمة. يصل جسم الحلقة إلى القيمة الموجودة في متغير word
وبالتالي تتم معالجة كل كلمة في القائمة.
للحلقات ذات النطاقات الرقمية
إذا كنت تريد تشغيل حلقة for
100 مرة ، فسيكون من المتعب جدًا كتابة سلسلة من 100 رقم في رأس الحلقة. نطاقات الأرقام تتيح لك تحديد الرقم الأول والأخير فقط.
هذا البرنامج النصي هو "number-range.sh."
#! / بن / باش بالنسبة إلى i في {1..10} فعل صدى "Loop spin:" $ i فعله
يتم تحديد نطاق الأرقام داخل الأقواس المتعرجة " {}
" بنقطتين " ..
" تفصل بين الأرقام التي تبدأ وتنتهي النطاق. تأكد من عدم تضمين أي مسافات بيضاء في تعريف النطاق.
هذه هي الطريقة التي تعمل بها:
./number-range.sh
يمكنك تضمين رقم آخر يحدد حجم الخطوة الذي يجب أن يستخدمه المكرر للتنقل عبر الأرقام الموجودة في النطاق. سيستخدم هذا البرنامج النصي "number-range2.sh" نطاقًا من 0 إلى 32 وحجم خطوة من 4.
#! / بن / باش لـ i في {0..32..4} فعل صدى "Loop spin:" $ i فعله
يخطو المكرر عبر نطاق الأرقام في قفزات من أربعة.
./number-range2.sh
للتكرار باستخدام أسماء الملفات
نظرًا لأنه يمكننا معالجة قوائم الكلمات ، يمكننا جعل البرامج النصية تعمل مع أسماء الملفات. يسمى هذا البرنامج النصي "filenames.sh."
#! / بن / باش للملف في word-list.sh number-range.sh number-range2.sh filenames.sh فعل ls -lh "$ file" فعله
سيكون من غير المجدي أن يكون لديك برنامج نصي يقوم فقط بما يمكن أن يفعله ls
، لكنه يوضح كيفية الوصول إلى أسماء الملفات داخل جسم الحلقة.
./filenames.sh
بطريقة مشابهة لاستخدام نطاق الأرقام ، يمكننا استخدام نمط ملف في رأس الحلقة لتحديد الملفات التي نريد معالجتها. هذا يتجنب الكثير من الكتابة ويعني أننا لسنا بحاجة إلى معرفة أسماء الملفات مسبقًا.
يسمى هذا البرنامج النصي "filenames2.sh." لقد استبدلنا قائمة أسماء الملفات بنمط اسم الملف "* .sh" للحصول على تقرير البرنامج النصي عن جميع ملفات البرامج النصية في الدليل الحالي.
#! / بن / باش للملف في * .sh فعل ls -lh "$ file" فعله
ها هو الناتج.
./filenames2.sh
للحلقات باستخدام معلمات سطر الأوامر
يمكننا إضافة المزيد من المرونة عن طريق تمرير نمط اسم الملف في سطر الأوامر. يمثل المتغير $*
جميع معلمات سطر الأوامر التي تم تمريرها إلى البرنامج النصي.
هذا هو "filenames3.sh."
#! / بن / باش للملف بالدولار * فعل ls -lh "$ file" فعله
سنطلب أسماء الملفات التي تبدأ بـ "n" ولها امتداد SH.
./filenames3.sh n * .sh
يمكننا أيضًا تمرير أكثر من نمط واحد في كل مرة.
./filenames3.sh n * .sh .bashrc
يأخذ 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 for
loop بالإنشاء السهل لحلقات for
التي لها متطلبات غريبة بعض الشيء. تبدأ هذه الحلقة من 15 ، وتحسب للخلف بخطوات 3. وهذه هي "c-like2.sh"
#! / بن / باش لـ ((i = 15 ؛ i> 0 ؛ i- = 3)) فعل صدى "رقم الحلقة:" $ i فعله
عندما نقوم بتشغيله ، يجب أن يقفز للخلف في خطوات من ثلاثة.
./c-like2.sh
لانهائي للحلقات
يمكنك أيضًا استخدام تنسيق for
loop هذا لإنشاء حلقة لا نهائية. كل ما عليك فعله هو إزالة جميع العناصر من رأس الحلقة ، مثل هذا. هذا هو "infinite.sh."
#! / بن / باش إلى عن على (( ؛ ؛ )) فعل صدى "اضغط على Ctrl + C للإيقاف ..." النوم 1 فعله
ستحتاج إلى الضغط على Ctrl + C لإيقاف الحلقة.
./infinite.sh
للتكرار باستخدام مصفوفات الكلمات
يمكننا التكرار بسهولة من خلال مجموعة من الكلمات. نحتاج إلى توفير اسم المصفوفة في رأس الحلقة ، وسيمر المكرر عبر جميع المدخلات في المصفوفة. هذا هو "word-array.sh."
#! / بن / باش التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") للتوزيعات في $ فعل صدى $ توزيعة فعله
يتم سرد جميع التوزيعات بالنسبة لنا.
./word-array.sh
قيادة الاستمرار
إذا كنت تريد أن تتخطى الحلقة إدخالًا معينًا ، فاختبر ما إذا كان المكرر يطابق هذا الإدخال واستخدم الأمر continue
. يتخلى أمر continue
عن الدوران الحالي للحلقة. يقوم بزيادة المكرر ويبدأ الدوران التالي للحلقة - بافتراض أن الإدخال الذي تريد تخطيه ليس العنصر الأخير في القائمة.
هذا هو "word-array2.sh." يتخطى إدخال المصفوفة "Arch" ولكنه يعالج جميع أعضاء المصفوفة الآخرين.
#! / بن / باش التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") للتوزيعات في $ فعل إذا [["$ distro" == "قوس"]] ؛ ومن بعد استمر فاي صدى $ توزيعة فعله
"القوس" لا يظهر في نافذة المحطة.
./word-array2.sh
أمر القطع
يخرج الأمر break
من الحلقة ويمنع المزيد من المعالجة.
هذا هو "word-array3.sh." إنه نفس البرنامج النصي السابق مع استبدال " continue
" break
.
#! / بن / باش التوزيعات = ("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") للتوزيعات في $ فعل إذا [["$ distro" == "قوس"]] ؛ ومن بعد فترة راحة فاي صدى $ توزيعة فعله
عندما يحتوي المكرر على "Arch" ، تتخلى حلقة for عن أي معالجة أخرى.
./word-array3.sh
للحلقات باستخدام المصفوفات الترابطية
في Bash 4 والإصدارات الأحدث ، تسمح لك المصفوفات الترابطية بإنشاء قوائم بأزواج القيمة الرئيسية التي يمكن البحث عنها بواسطة المفتاح أو القيمة. بسبب العلاقة ثنائية الاتجاه بين المفتاح والقيمة ، يطلق عليهم أيضًا قواميس البيانات.
يمكننا التكرار من خلال مصفوفة ترابطية باستخدام حلقة for
. هذا البرنامج النصي هو "Associative.sh". تحدد مصفوفة ترابطية بها أربعة مداخل ، واحدة لكل من "الكلب" و "القط" و "روبن" و "الإنسان". هذه هي المفاتيح. القيم هي عدد الأرجل (الافتراضي) لكل منها.
#! / بن / باش أعلن -A حيوانات = ([كلب] = أربع أرجل [قطة] = أربع أرجل [روبن] = ذات رجلين [إنسان] = ذات رجلين) للأرجل في $ {! الحيوانات [@]} فعل إذا [$ {حيوانات [$ Leg]} == "ذات رجلين"]؛ ومن بعد صدى $ {أرجل} فاي فعله
مكرر يسمى legs
. لاحظ أن رأس الحلقة يحتوي على " !
" علامة تعجب. هذا لا يعمل كعامل NOT المنطقي ، إنه جزء من بناء جملة الصفيف الترابطي. مطلوب للبحث من خلال المصفوفة.
يقوم جسم الحلقة بإجراء اختبار مقارنة سلسلة. إذا كانت قيمة عضو المصفوفة "Two-legged" ، فإنها تطبع قيمة المفتاح إلى النافذة الطرفية. عندما نقوم بتشغيله ، يقوم البرنامج النصي بطباعة المخلوقات ذات الأرجل.
./associative.sh
التكرار على إخراج الأوامر
إذا كان لديك أمر أو تسلسل أوامر ينتج عنه قائمة بشيء ما ، مثل أسماء الملفات ، فيمكنك تكرارها باستخدام حلقة for
. تحتاج إلى الانتباه إلى التوسعات غير المتوقعة في اسم الملف ، ولكن في الحالات البسيطة ، لا بأس بذلك.
هذا البرنامج النصي هو "command.sh." يستخدم ls
و wc
لتوفير قائمة مرتبة بأسماء ملفات البرامج النصية ، جنبًا إلى جنب مع عدد الأسطر والكلمات والبايت.
#! / بن / باش لـ i بـ $ (ls * .sh | Sort) ؛ فعل صدى $ (wc $ i) فعله
عندما نقوم بتشغيله نحصل على الإحصائيات الخاصة بكل ملف ، مع ترتيب الملفات حسب الترتيب الأبجدي.
./command.sh
ذا دازلينج فور لوب
حلقة for
هي أداة برمجة متعددة الاستخدامات وسهلة الفهم. ولكن بقدر ما هي مرنة ، لا تنس أن الحلقات الأخرى موجودة لسبب ما. لا تنبهر بالتفكير في أن الحلقة for
هي كل ما تحتاجه.
حلقة while
، على سبيل المثال ، أكثر ملاءمة لأشياء معينة من حلقة for
، مثل قراءة الأسطر من ملف.
تعني كتابة نصوص جيدة استخدام أنسب أداة للمهمة المطروحة. حلقة for
هي أداة رائعة في صندوق أدواتك من الحيل.