فهرست مطالب
چکیده
در این فصل صحبت خواهیم نمود که چگونه در اسکریپتهایمان با کاربر ارتباط متقابل داشته باشیم:
چاپ پیغامهای کاربرمحور و توضیحات
دریافت ورودی از کاربر
اعلان برای ورودی کاربر
کاربرد توصیفگرهای فایل برای خواندن و نوشتن فایلهای چندگانه
برخی اسکریپتها بدون هیچگونه ارتباط با کاربر اجرا میشوند. مزایای اسکریپتهای غیر محاورهای عبارتند از:
اسکریپت در هر نوبت به طریق قابل پیشبینی اجرا میشود.
اسکریپت میتواند در پسزمینه اجرا شود.
در هرحال، اسکریپتهای بسیاری، به دریافت ورودی کاربر نیاز دارند، و یا در حالیکه اسکریپت اجرا میشود خروجی را به کاربر میدهند. از طرف دیگر مزایای اسکریپتهای محاورهای عبارتند از:
اسکریپتها میتوانند انعطافپذیرتر ساحته شوند.
کاربران میتوانند در حالیکه اسکریپت اجرا میشود آن را شخصیسازی کنند یا و یا روشهای متفاوتی در رفتار آن ایجاد کنند.
اسکریپت میتواند همانطور که در حال اجرا میباشد پیشرفت خود را گزارش کند.
موقع نوشتن اسکریپتهای محاورهای، هرگز از توضیحات پرهیز نکنید. اسکریپتی که پیغامهای مناسبی چاپ میکند خیلی بیشتر کاربرپسند است و آسانتر میتواند اشکالیابی شود. یک اسکریپت ممکن است کاری را به طور کامل انجام دهد، اما اگر به کاربر اطلاع ندهد که چه میکند، شما تماسهای پشتیبانی زیادی خواهیدداشت. بنابراین پیغامهایی که به کاربر یگویدبرای خروجی منتظر باشد چون محاسباتی در حال انجام است، ضمیمه کنید. اگر میسر است سعی کنید به کاربر اشارهای در مورد اینکه چه مدت باید در انتظار باشد ارائه کنید. در حال انجام وظیفه معینی به طور معمول زمان انتظار طولانی است، شاید بهتر باشد در خروجی اسکریپت گردآوری برخی نشانههای پردازشی ملاحظه شود.
همچنین موقعی که به کاربر اعلانی برای ورودی میدهید،بهتر است کمی اطلاعات اضافه در مورد نوع دادهای که باید وارد کند، ارائه کنید. این مطلب به خوبی مقابله شناسهها با پیغام کاربردی همراه را اعمال میکند.
Bash دارای دستورات echo و printf جهت تهیه توضیحات برای کاربران میباشد، و اگر چه شما حداقل در حال حاضر بااستفاده دستور echo آشنا میباشید، در بخش بعد ما چند مثال بیشتر را مطرح خواهیم نمود.
دستور داخلی echo شناسههایش را که با فاصله از یکدیگر جداشدهاند و با یک کاراکتر سطر جدید خاتمه مییابند در خروجی مینویسد. کد برگشتی آن همیشه صفر است. echo یک جفت گزینه میپذیرد:
-e
: کاراکترهای پوشش یافته با \ را تفسیر میکند.
-n
: انتقال به سطر جدید را موقوف میکند.
به عنوان یک مثال از افزودن توضیحات، مثالهای feed.sh
و penguin.sh
از بخشی به نام«بررسی شناسههای خطفرمان» قدری بهسازی میکنیم:
michel ~/test>
catpenguin.sh
#!/bin/bash # This script lets you present different menus to Tux. He will only be happy # when given a fish. To make it more fun, we added a couple more animals. if [ "$menu" == "fish" ]; then if [ "$animal" == "penguin" ]; then echo -e "Hmmmmmm fish... Tux happy!\n" elif [ "$animal" == "dolphin" ]; then echo -e "\a\a\aPweetpeettreetppeterdepweet!\a\a\a\n" else echo -e "*prrrrrrrt*\n" fi else if [ "$animal" == "penguin" ]; then echo -e "Tux don't like that. Tux wants fish!\n" exit 1 elif [ "$animal" == "dolphin" ]; then echo -e "\a\a\a\a\a\aPweepwishpeeterdepweet!\a\a\a" exit 2 else echo -e "Will you read this sign?! Don't feed the "$animal"s!\n" exit 3 fi fimichel ~/test>
catfeed.sh
#!/bin/bash # This script acts upon the exit status given by penguin.sh if [ "$#" != "2" ]; then echo -e "Usage of the feed script:\t$0 food-on-menu animal-name\n" exit 1 else export menu="$1" export animal="$2" echo -e "Feeding $menu to $animal...\n" feed="/nethome/anny/testdir/penguin.sh" $feed $menu $animal result="$?" echo -e "Done feeding.\n" case "$result" in 1) echo -e "Guard: \"You'd better give'm a fish, less they get violent...\"\n" ;; 2) echo -e "Guard: \"No wonder they flee our planet...\"\n" ;; 3) echo -e "Guard: \"Buy the food that the Zoo provides at the entry, you ***\"\n" echo -e "Guard: \"You want to poison them, do you?\"\n" ;; *) echo -e "Guard: \"Don't forget the guide!\"\n" ;; esac fi echo "Leaving..." echo -e "\a\a\aThanks for visiting the Zoo, hope to see you again soon!\n"michel ~/test>
feed.shapple camel
Feeding apple to camel... Will you read this sign?! Don't feed the camels! Done feeding. Guard: "Buy the food that the Zoo provides at the entry, you ***" Guard: "You want to poison them, do you?" Leaving... Thanks for visiting the Zoo, hope to see you again soon!michel ~/test>
feed.shapple
Usage of the feed script: ./feed.sh food-on-menu animal-name
مطالب بیشتر در مورد کاراکترهای گریز را میتوانید در یخشی به نام«کاراکترهای گریز» پیدا کنید. جدول زیر خلاصهای از رشتههایی که توسط فرمان echo شناخته میشوند، ارائه میکند:
جدول 8.1: رشتههای Escape توسط فرمان echo
رشته | مقصود |
---|---|
\a | هشدار( زنگ ). |
\b | برگشت یک کاراکتر به عقب. |
\c | موقوف نمودن انتقال به سطر جدید. |
\e | Escape |
\f | رفتن به ابتدای سطر(کاراکتر FF). |
\n | سطر جدید. |
\r | سر سطر رفتن(کاراکتر CF). |
\t | افقی tab. |
\v | عمودی tab. |
\\ | ممیز برعکس. |
\0NNN | کاراکتر ۸ بیتی که مقدار آن عدد اکتال NNN است(صفر تا سه رقم اکتال). |
\NNN | کاراکتر ۸ بیتی که مقدار آن عدد اکتال NNN است( یک با سه رقم تکتال ). |
\xHH | کاراکتر ۸ بیتی که مقدار آن هگزادسیمال است( یک یا دورقم هگزا ). |
برای اطلاعات بیشتر در باره فرمان printf و روش مجاز قالببندی خروجی آن،صفحههای info از Bash را ببینید. به خاطر بسپارید که ممکن است بین نگارشهای مختلف Bash تفاوتهایی وجود داشته یاشد.