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

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

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

Break و continue »
« دستور داخلی shift

ایجاد منو با فرمان داخلی select

کلیات

استفاده از select

ساختار selectتولید آسان منو را میسر می‌کند. دستور زبان کاملاً مشابه همان است که برای حلقه for است:

select WORD [in LIST]; do RESPECTIVE-COMMANDS; done

LIST به تولید لیستی از اقلام، بسط می‌یابد. بسط در خروجی استاندارد خطا چاپ می‌شود، جلوی هر یک از اقلام یک عدد قرار می‌گیرد. اگر in LIST حاضر نباشد، پارامترهای موضعی چاپ می‌شوند، همانطور‌که اگر ‎ in $@‎ تعیین شده بود. LIST فقط یک مرتبه چاپ می‌شود.

بعد از چاپ تمام اقلام، اعلان PS3 چاپ می‌شود و یک سطر از ورودی خوانده می‌شود. اگر این سطر یک عدد مطابق عدد مقابل یکی از اقلام باشد، مقدار WORD مطابق نام آن مورد از اقلام تنظیم می‌گردد. اگر سطر تهی باشد، اقلام و اعلان PS3 دوباره نمایش داده می‌شوند. اگر یک EOF ( کاراکتر انتهای فایل ) خوانده شود، حلقه خارج می‌شود. نظر به اینکه اکثر کاربران نشانی ازآنکه کدام ترکیب کلیدی برای ایجاد EOF به کارمی‌رود، ندارند، داشتن یک فرمان break به عنوان یکی از اقلام، بیشتر کاربر پسند است. سطر خوانده شده با هر مقدار دیگر، WORD را مطابق یک رشته تهی تنظبم می‌کند.

سطر خوانده شده در متغیر REPLY ذخیره می‌شود.

دستورات RESPECTIVE-COMMANDS بعد از هر انتخاب اجرا می‌گردند، تا اینکه عدد خوانده شده نماینده break باشد. در این حالت حلقه خارج می‌شود.

مثال‌ها

این یک مثال بسیار ساده است، اما به طوری که می‌بینید، خیلی کاربر پسند نیست:

[carol@octarine testdir] cat private.sh
#!/bin/bash

echo "This script can make any of the files in this directory private."
echo "Enter the number of the file you want to protect:"

select FILENAME in *;
do
     echo "You picked $FILENAME ($REPLY), it is now only accessible to you."
     chmod go-rwx "$FILENAME"
done

[carol@octarine testdir] ./private.sh
This script can make any of the files in this directory private.
Enter the number of the file you want to protect:
1) archive-20030129
2) bash
3) private.sh
#? 1
You picked archive-20030129 (1)
#?

تنظیم اعلان PS3 و اضافه کردن امکان خروج آن را بهتر می‌کند:

#!/bin/bash

echo "This script can make any of the files in this directory private."
echo "Enter the number of the file you want to protect:"

PS3="Your choice: "
QUIT="QUIT THIS PROGRAM - I feel safe now."
touch "$QUIT"

select FILENAME in *;
do
  case $FILENAME in
        "$QUIT")
          echo "Exiting."
          break
          ;;
        *)
          echo "You picked $FILENAME ($REPLY)"
          chmod go-rwx "$FILENAME"
          ;;
  esac
done
rm "$QUIT"

منوهای فرعی

هر جمله‌ای در داخل یک ساختار select می‌تواند یک حلقه دیگر select باشد، منو یا منوهای فرعی در داخل یک منو را فعال می‌کند.

به طور پیش‌فرض متغیر PS3 موقعی که وارد یک حلقه select تو در تو می‌شوید، تغییر نمی‌کند. اگر یک اعلان متفاوت برای منوهای فرعی می‌خواهید، از تنظیم نمودن آن در موقع مناسب مطمئن شوید.

Break و continue »
« دستور داخلی shift
ترجمه محمود پهلوانی