فرمان break برای خروج از حلقه جاری قبل از به پایان رسیدن عادی آن به کار میرود. این کار موقعی که از قبل نمیدانید یک حلقه چند مرتبه باید اجرا گردد، به طور نمونه به علت آنکه وابسته به ورودی کاربر است.
مثال زیر یک حلقه while را به نمایش میگذارد که میتواند خاتمه داده شود. این نگارش اندک بهبود یافته اسکریپت wisdom.sh
از بخشی به نام«کاربرد ورودی صفحه کلید برای کنترل حلقه while » میباشد.
#!/bin/bash # This script provides wisdom # You can now exit in a decent way. FORTUNE=/usr/games/fortune while true; do echo "On which topic do you want advice?" echo "1. politics" echo "2. startrek" echo "3. kernelnewbies" echo "4. sports" echo "5. bofh-excuses" echo "6. magic" echo "7. love" echo "8. literature" echo "9. drugs" echo "10. education" echo echo -n "Enter your choice, or 0 for exit: " read choice echo case $choice in 1) $FORTUNE politics ;; 2) $FORTUNE startrek ;; 3) $FORTUNE kernelnewbies ;; 4) echo "Sports are a waste of time, energy and money." echo "Go back to your keyboard." echo -e "\t\t\t\t -- \"Unhealthy is my middle name\" Soggie." ;; 5) $FORTUNE bofh-excuses ;; 6) $FORTUNE magic ;; 7) $FORTUNE love ;; 8) $FORTUNE literature ;; 9) $FORTUNE drugs ;; 10) $FORTUNE education ;; 0) echo "OK, see you!" break ;; *) echo "That is not a valid choice, try a number from 0 to 10." ;; esac done
به خاطر داشته باشید که break از حلقه خارج میشود، نه از اسکریپت. این مورد میتواند با اضافه کردنیک دستور echo در انتهای اسکریپت به نمایش گذاشته شود. این فرمان echo هنوز هم با وجود ورودی که باعث شده استbreak اجرا بشود( وقتی کاربر “0” را تایپ نموده) نیز اجرا میگردد.
در حلقههای تو در تو، break اجازه میدهد تعیین شود که خروج از کدام حلقه صورت گیرد. برای اطلاعات بیشترصفحههای info Bash را ملاحظه کنید.
دستور continue موجب از سرگیری تکرار حلقه for, while, until, select میگردد.
موقعی که از حلقه for استفاده میکنید، متغیر کنترلی مقدار عضو بعدی لیست را میپذیرد. از طرف دیگر، موقعی که از حلقه while یا until استفاده میکنید، اجرا با TEST-COMMAND در بالای حلقه ادامه مییابد.
در مثال زیر، نام فایلها به حالت حروف کوچک تبدیل میشود. اگر نیاز به انجام تبدیل نباشد، یک جمله continue اجرای حلقه را از سر میگیرد. این دستورات منابع زیادی از سیستم مصرف نمیکند و به احتمال بسیار مسائل مشابه با استفاده از sed و awkنیز میتوانند حل شوند. اما به هرحال، موقع اجرای کارهای سنگین، آگاهی درباره این نوع ساختار سودمند است، که اگر بررسیها در محلهای صحیحی در اسکریپت درج گردند ، حتی منابع ناچیز سیستم ممکن است ضروری نباشد.
[carol@octarine ~/test]
cattolower.sh
#!/bin/bash # This script converts all file names containing upper case characters into file# names containing only lower cases. LIST="$(ls)" for name in "$LIST"; do if [[ "$name" != *[[:upper:]]* ]]; then continue fi ORIG="$name" NEW=`echo $name | tr 'A-Z' 'a-z'` mv "$ORIG" "$NEW" echo "new name for $ORIG is $NEW" done
این اسکریپت حداقل یک اشکال دارد: فایلهای موجود را رونویسی میکند. گزینه noclobber
از Bash فقط در موقع تغییر مسیر پیشفرض است. گزینه -b
فرمان mv امنیت بیشتری فراهم مینماید، اما فقط در حالت رونویسی تصادفی، به طوری که در این آزمایش نشان داده شده، امن است:
[carol@octarine ~/test]
rm*
[carol@octarine ~/test]
touchtest Test TEST
[carol@octarine ~/test]
bash-x
tolower.sh
++ ls + LIST=test Test TEST + [[ test != *[[:upper:]]* ]] + continue + [[ Test != *[[:upper:]]* ]] + ORIG=Test ++ echo Test ++ tr A-Z a-z + NEW=test + mv -b Test test + echo 'new name for Test is test' new name for Test is test + [[ TEST != *[[:upper:]]* ]] + ORIG=TEST ++ echo TEST ++ tr A-Z a-z + NEW=test + mv -b TEST test + echo 'new name for TEST is test' new name for TEST is test[carol@octarine ~/test]
ls-a
./ ../ test test~
ابزار tr قسمتی از بسته نرمافزاری textutils میباشد، این ابزار تمام انواع تغییر وتبدیل کاراکتری را میتواند انجام دهد.