راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

تغییر مسیر ورودی-خروجی و حلقه‌ها »
« ایجاد منو با دستور داخلی select

Break و continue

فرمان داخلی break

فرمان 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

دستور continue موجب از سرگیری تکرار حلقه for, while, until, select می‌گردد.

موقعی که از حلقه for استفاده می‌کنید، متغیر کنترلی مقدار عضو بعدی لیست را می‌پذیرد. از طرف دیگر، موقعی که از حلقه while یا until استفاده می‌کنید، اجرا با TEST-COMMAND در بالای حلقه ادامه می‌یابد.

مثال‌ها

در مثال زیر، نام فایل‌ها به حالت حروف کوچک تبدیل می‌شود. اگر نیاز به انجام تبدیل نباشد، یک جمله continue اجرای حلقه را از سر می‌گیرد. این دستورات منابع زیادی از سیستم مصرف نمی‌کند و به احتمال بسیار مسائل مشابه با استفاده از sed و awkنیز می‌توانند حل شوند. اما به هرحال، موقع اجرای کارهای سنگین، آگاهی درباره این نوع ساختار سودمند است، که اگر بررسی‌ها در محل‌های صحیحی در اسکریپت درج گردند ، حتی منابع ناچیز سیستم ممکن است ضروری نباشد.

[carol@octarine ~/test] cat tolower.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] touch test 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 می‌باشد، این ابزار تمام انواع تغییر وتبدیل کاراکتری را می‌تواند انجام دهد.

تغییر مسیر ورودی-خروجی و حلقه‌ها »
« ایجاد منو با دستور داخلی select
ترجمه محمود پهلوانی