في حين
يمكن أن تعبر باش عن فكرة مماثلة. لنفترض أننا أردنا عرض خمسة أرقام بالتسلسل-
ترتيب tial من واحد إلى خمسة. أ سحق يمكن إنشاء البرنامج النصي على النحو التالي:
#! / بن / باش
# while-count: اعرض سلسلة من الأرقام العدد = 1
بينما [[$ count -le 5]] ؛ فعل echo $ count = $ ((count + 1))
فعل
صدى "انتهى".
#! / بن / باش
# while-count: اعرض سلسلة من الأرقام العدد = 1
بينما [[$ count -le 5]] ؛ فعل echo $ count = $ ((count + 1))
فعل
صدى "انتهى".
عند تنفيذه ، يعرض هذا البرنامج النصي ما يلي:
[me @ linuxbox ~] $ أثناء العد
1
2
3
4
5
تم الانتهاء من.
[me @ linuxbox ~] $ أثناء العد
1
2
3
4
5
تم الانتهاء من.
بناء جملة في حين الأمر هو:
في حين الأوامر؛ فعل الأوامر؛ انتهى
اعجاب if, في حين بتقييم حالة الخروج من قائمة الأوامر. طالما أن حالة الخروج هي صفر ، فإنها تنفذ الأوامر داخل الحلقة. في النص أعلاه ، المتغير عد تم إنشاؤه وتعيين قيمة أولية لـ 1. في حين يقوم الأمر بتقييم حالة الخروج من [[]] أمر مركب. طالما أن ملف [[]] يقوم الأمر بإرجاع حالة الخروج من الصفر ، ويتم تنفيذ الأوامر داخل الحلقة. في نهاية كل دورة ، يكون ملف [[]] يتكرر الأمر. بعد خمس تكرارات للحلقة ، تكون قيمة عد ارتفع إلى 6 ، [[]] لم يعد الأمر يُرجع حالة الخروج من الصفر وتنتهي الحلقة. يستمر البرنامج مع العبارة التالية التي تلي الحلقة.
يمكننا استخدام ملف حائط اللوب لتحسين قائمة القراءة برنامج من الفصل السابق:
#! / بن / باش
# while-menu: برنامج معلومات نظام يحركه القائمة
#! / بن / باش
# while-menu: برنامج معلومات نظام يحركه القائمة
تأخير = 3 # عدد الثواني لعرض النتائج
بينما [[$ REPLY! = 0]] ؛ فعل
واضح
قطة << - _EOF_
الرجاء التحديد:
1. عرض معلومات النظام
2. عرض مساحة القرص
3. عرض استخدام مساحة المنزل
0. قم بإنهاء
_EOF_
read -p "أدخل التحديد [0-3]>"
إذا [[$ REPLY = ~ ^ [0-3] $]] ؛ ثم إذا [[$ REPLY == 1]] ؛ من ثم
صدى وقت تشغيل "Hostname: $ HOSTNAME"
ينام $ DELAY
fi
إذا [[$ REPLY == 2]] ؛ ثم df -h
ينام $ DELAY
fi
إذا [[$ REPLY == 3]] ؛ من ثم
إذا [[$ (id -u) -eq 0]]؛ من ثم
صدى "Home Space Utilization (All Users)" du -sh / home / *
آخر
صدى "Home Space Utilization ($ USER)" du -sh $ HOME
fi
ينام $ DELAY
fi
آخر
صدى "إدخال غير صالح".
ينام $ DELAY
fi
فعل
صدى "تم إنهاء البرنامج".
تأخير = 3 # عدد الثواني لعرض النتائج
بينما [[$ REPLY! = 0]] ؛ فعل
واضح
قطة << - _EOF_
الرجاء التحديد:
1. عرض معلومات النظام
2. عرض مساحة القرص
3. عرض استخدام مساحة المنزل
0. قم بإنهاء
_EOF_
read -p "أدخل التحديد [0-3]>"
إذا [[$ REPLY = ~ ^ [0-3] $]] ؛ ثم إذا [[$ REPLY == 1]] ؛ من ثم
صدى وقت تشغيل "Hostname: $ HOSTNAME"
ينام $ DELAY
fi
إذا [[$ REPLY == 2]] ؛ ثم df -h
ينام $ DELAY
fi
إذا [[$ REPLY == 3]] ؛ من ثم
إذا [[$ (id -u) -eq 0]]؛ من ثم
صدى "Home Space Utilization (All Users)" du -sh / home / *
آخر
صدى "Home Space Utilization ($ USER)" du -sh $ HOME
fi
ينام $ DELAY
fi
آخر
صدى "إدخال غير صالح".
ينام $ DELAY
fi
فعل
صدى "تم إنهاء البرنامج".
من خلال إرفاق القائمة في حلقة while ، يمكننا جعل البرنامج يكرر عرض القائمة بعد كل تحديد. الحلقة تستمر طالما الرد لا تساوي "0" ويتم عرض القائمة مرة أخرى ، مما يتيح للمستخدم فرصة الاختيار مرة أخرى. في نهاية كل عمل ، أ النوم يتم تنفيذ الأمر حتى يتوقف البرنامج مؤقتًا لبضع ثوان للسماح برؤية نتائج التحديد قبل مسح الشاشة وإعادة عرض القائمة. مرة واحدة الرد يساوي "0" ، مما يشير إلى اختيار "إنهاء" ،
تنتهي الحلقة ويستمر التنفيذ بالسطر التالي فعل.