شل اسکریپت (Shell Script) روی VPS (بخش دوم) — از صفر تا صد
در بخش قبلی این راهنما در مورد آمادهسازی فضای سیستم برای نوشتن اسکریپت شل صحبت کردیم. در این بخش از راهنما دستورهای مقدماتی Shell Script روی یک VPS را معرفی میکنیم. این دستورهای مقدماتی مسئول گردآوری اطلاعاتی از سوی کاربر و یا نمایش اطلاعاتی برای کاربر هستند. در این نوشته فرض کردهایم که شما قبلاً پوشه شل اسکریپت را بر اساس آن چه در بخش اول این راهنما گفتیم پیکربندی کردهاید.
دستور echo
این دستور امکان نمایش اطلاعات به کاربر را فراهم میسازد.
با استفاده از این دستور میتوان رشتههای متنی ساده، متغیرها یا ترکیبی از هر دو را نمایش داد. این دستور دو پارامتر به صورت n- و e- دارد. پارامتر n- باعث میشود که متن نمایش یافته در انتهای خود، کاراکتر «New line» (اینتر) را نداشته باشد و پارامتر e- باعث میشود که مجموعه کدهای زیر را درون رشته جای دهیم:
\a - Alert sound \b - Backspace character \c - Don’t display new line \e - Escape character \n - New line \r - Carriage return \t - Horizontal tab \0xx - ASCII character \\ - Backslash
برای نمونه دستورهای زیر دقیقاً کار یکسانی را انجام میدهند:
echo -e "Text\c" echo -n "Text"
برای نمایش متغیرها با echo، کافی است آنها را به صورت زیر در رشته خود با کاراکتر ابتدایی $ بنویسید:
string=World! echo "Hello $string"
میتوان متن، دستورها و متغیرها را در یک رشته منفرد ترکیب کرد. حتی میتوان به راحتی با استفاده از دستور n\ چندین خط از متن را در یک خط از کد ترکیب کرده و در یک خط جدید در خروجی ارائه کرد.
متن قالببندی شده با استفاده از echo
متنها را با استفاده از دستور echo میتوان به رنگها و سبکهای مختلف نمایش داد. البته همه این تنظیمات در همه کلاینتهای ترمینال کار نمیکنند و از این رو باید همواره در خاطر داشته باشید که ممکن است افراد نتایج متفاوتی نسبت به آن چه طراحی میکنید، شاهد باشند. اما با توجه به این که تفاوتها صرفاً بصری هستند در اغلب موارد مشکل جدی ایجاد نمیکند. هر نوع سفارشیسازی (بولد کردن متن، طراحی زیرخط یا رنگآمیزی) به وسیله دنبالههایی از escape تعریف میشود. منظور از escape کدی است که پس از کاراکتر e\ میآید.
مانند زیر:
echo -e "This is \e[1mBold"
در جدول کوچک زیر اغلب کدهای رایج آن ارائه شده است:
Bold: \e[1m Dim: \e[2m Underlined: \e[4m Inverted colors: \e[7m
میتوان با ترکیب کردن آنها برای نمونه متنهای بولد، زیرخط دار ایجاد کرد. همچنین با استفاده از «e[0m\» میتوان این تنظیمات را ریست کرد.
echo -e "\e[4mThis \e[1mis\e[0m \e[7man example \e[0mstring"
دستور فوق را امتحان کرده و خروجی را مشاهده کنید.
رنگها اساساً کارکرد مشابهی دارند. هر رنگ یک کد دارد و میتوان این کد را همانند کدهای قالببندی در نوشته درج کرد. در ادامه جدولی از رنگهایی که اغلب کلاینتهای ترمینال پشتیبانی میکنند، ارائه کردهایم:
Black: \e[30m (Text) and \e[40m (Background) Red: \e[31m (Text) and \e[41m (Background) Green: \e[32m (Text) and \e[42m (Background) Yellow: \e[33m (Text) and \e[43m (Background) Blue: \e[34m (Text) and \e[44m (Background) Magenta: \e[35m (Text) and \e[45m (Background) Cyan: \e[36m (Text) and \e[46m (Background) Light gray: \e[37m (Text) and \e[47m (Background) Default color: \e[39m (Text) and \e[49m (Background)
ضمناً میتوان رنگهای متن را با رنگهای پسزمینه ترکیب کرد و همچنین کدهای قالببندی معمول را به متون رنگی اضافه کرد.
دستور read
برای دریافت اطلاعاتی از کاربر میتوان از دستور read استفاده کرد. بدین ترتیب میتوانیم همه مواردی که کاربر تا لحظه زدن ENTER وارد میکند را در یک متغیر ذخیره کنیم. تنها آرگومان این دستور متغیری است که قرار است اطلاعات در آن ذخیره شود. برای نمونه در اسکریپت کوتاه زیر یک پوشه با نامی که کاربر وارد خواهد کرد، ایجاد میشود:
#!/bin/bash read foldername mkdir foldername
اما این یک اسکریپت است که هیچ اینترفیسی ندارد. کاربر از کجا باید بداند که باید چه چیزی و چگونه وارد نماید؟
اسکریپت نمونه
در اسکریپت نمونه زیر از همه چیزهایی که تا اینجا در این راهنما آموختهایم بهره میگیریم. پیامهای با قالب سفارشی برای کاربر نمایش مییابند و یک ورودی نیز دریافت میشود. در بخش نخست این راهنما مثالی داشتیم که در آن فایلها را بر مبنای پارامترهای ارسالی هنگام فراخوانی اسکریپت، پشتیبان میگرفتیم. اینک آن مثال را بازنویسی میکنیم و از کاربر میپرسیم که میخواهد از چه چیزی پشتیبانگیری شود؟
ابتدا باید فایل را تنظیم و باز کنیم:
touch ~/bin/filebackup2 chmod +x ~/bin/filebackup2 nano ~/bin/filebackup2
در ادامه اسکریپت را بازنویسی میکنیم تا یک رابط (اینترفیس) داشته باشد:
#!/bin/bash #Backup script 2.0 #Description: makes a copy of any given file at the backup folder #Author: Your Name #Date: 9/19/2013 #Request the backup folder from the user: echo -e "\e[1m\e[32mFile Backup Utility\n\e[39m\e[0mPlease input your backup folder:" read BACKUPFOLDER #The script will make sure the folder exists mkdir -p $BACKUPFOLDER #Request files to be backed up: echo -e "\e[47m\e[30mWhich files do you want backed up?\e[39m\e[49m" read FILES cp -a $FILES $BACKUPFOLDER
سخن پایانی
در این بخش از راهنمای شل اسکریپت، با دستورهای مقدماتی آشنا شدیم که امکان نوشتن اسکریپتی برای تعامل صحیح با کاربر را فراهم میسازد. این وضعیت برای اطمینان یافتن از این که همه افراد درک میکنند اسکریپت چه میکند و چه نوع دادهای میخواهد، حائز اهمیت بالایی است. البته لازم نیست همه اسکریپتها رابطی داشته باشند، همچنان که اولین اسکریپتی که در بخش قبلی نوشتیم بدون داشتن رابط در اغلب موارد سریعتر و بهتر بود. با این وجود، در خط فرمان اسکریپتهایی که پیادهسازی میشوند باید رابط help داشته باشند که به این منظور به دستور echo نیاز دارند.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای پایگاه داده و سیستم های مدیریت اطلاعات
- شل اسکریپت (Shell Script) روی VPS — از صفر تا صد
- مجموعه آموزشهای برنامهنویسی
- ترمینال لینوکس و آنچه برای شروع به کار با آن باید بدانید
- اسکرپیتنویسی شل چیست و چرا مهم است؟
==