شل اسکریپت (Shell Script) روی VPS (بخش سوم) — از صفر تا صد
عبارتهای شرطی برای هر زبان برنامهنویسی اسکریپت نویسی و با امکانات کامل، گزینهای ضروری محسوب میشوند. در بخش سوم و پایانی این سلسله آموزشهای شل اسکریپت با دستورهای if و else در bash آشنا میشوید و شیوه استفاده از آنها را میآموزید. در این مقاله فرض ما بر این است که قبلاً پوشه شل اسکریپت خود را بر مبنای آن جه در بخش اول این راهنما آموختیم پیکربندی کردهاید.
دستور if
یک عبارت شرطی برای اجرای اقدامات خاصی در صورت درست بودن یا نادرست بودن یک شرط استفاده میشود. در شل اسکریپتها این وضعیت از طریق دستور if تعریف میشود. در ادامهی دستورِ if عبارتی که قرار است بررسی شود میآید. این عبارت میتواند کد خروج (exit) اجرای یک دستور، یک عبارت ریاضیاتی، و یا هر چیز دیگری باشد.
زمانی که با کدهای exit کار میکنیم، این دستور کاملاً سرراست است:
if ls folder then echo "Folder exists" fi
اگر پوشه وجود داشته باشد دستور echo اجرا میشود، چون کد خروج 0 به عنوان موفقیتآمیز بازگشت یافته است. در غیر این صورت اگر پوشه وجود نداشته باشد، متنی نمایش نخواهد یافت. همه عبارتهای if باید دارای دستور then باشند و با یک fi خاتمه یابند. اگر با کدهای exit کار نمیکنید و برای مثال میخواهید یک عبارت ریاضیاتی را بررسی کنید، باید از دستور test استفاده کنید. عملگرهای زیر در شل اسکریپت برای مقایسه اعداد استفاده میشوند:
-eq برابر است یا -ne برابر نیست با -lt کمتر از -le کمتر مساوی با -gt بزرگتر از -ge بزرگتر یا مساوی
دستورهای test را میتوان به دو روش نوشت:
if test 4 -gt 3 یا if [4 -gt 3]
هر دو دستور فوق نتیجه یکسانی دارند و نیازمند then و if نیز هستند. مثال:
if [20 -lt 10] then echo "What?" fi
در کد فوق عبارت ?What هرگز برای کاربر نمایش نمییابد، زیرا 20 بزرگتر از 10 است. اکنون اگر بخواهیم در صورت نادرست بودن عبارت شرطی یک پیام به کاربر نمایش دهیم چه باید بکنیم؟
دستور else
دستور else چنان که از نامش مشخص است، یک مسیر جایگزین برای دستور if اضافه میکند. اساس کار آن به صورت زیر است:
if [20 -lt 10] then echo "What?" else echo "No, 20 is greater than 10." Fi
علاوه بر عبارتهای ریاضیاتی میتوان به مقایسه رشتهها با if/else نیز پرداخت. این کار نیازمند دستور زبانی است که تا حدودی متفاوت است؛ اما همچنان از دستورهای تست یا [] استفاده میکند. ساختار آن چنین است:
string = string or string equals string string!= string or string does not equal string string or string is not null or not defined -n string or string is not null and exists -z string or string is null and exists
همچنین روشی برای دانستن مشخصات فایلها وجود دارد:
-s file خالی نبودن فایل را بررسی میکند -f file فایل بودن و عدم پوشه بودن را بررسی میکند -d folder پو. شه بودن و عدم فایل بودن را بررسی میکند -w file نوشتنی بودن فایل را بررسی میکند -r file فقط-خواندی بودن فایل را بررسی میکند -x file اجرایی بودن فایل را بررسی میکند
If های تو در تو
از عبارتهای if میتوان درون عبارتهای if دیگر نیز استفاده کرد و بدین ترتیبت if تو در تو ایجاد میشود. در مثال زیر این وضعیت به کمک ورودی ارائه شده از سوی کاربر با استفاده از دستور read بررسی میشود:
#!/bin/bash echo "Input which file you want created" read file if [-f $file] then echo "The file already exists" else touch $file if [-w $file] then echo "The file was created and is writable" else cho "The file was created but isn't writable" fi fi
اسکریپت نمونه
در مثال زیر تلاش میکنیم اسکریپت پشتیبانگیری فایلهای خود را که در بخشهای قبلی این راهنما معرفی کردیم بهبود ببخشیم. این نسخه از اسکریپت اقدام به تست کردن پوشه پشتیبانی میکند تا ببیند آیا پوشه وجود دارد یا نه و اگر وجود نداشت امکان ایجاد آن را دارد.
در ابتدا اسکریپت را ایجاد میکنیم:
touch ~/bin/filebackup3 chmod +x ~/bin/filebackup3 nano ~/bin/filebackup3
و سپس آن را ویرایش میکنیم:
#!/bin/bash #Backup script 3.0 #Description: makes a copy of any given file at the backup folder #Author: Your Name #Date: 9/29/2013 #Request the backup folder from the user: echo -e "\e[47m\e[1m\e[32mFile Backup Utility\n\e[39m\e[0m\e[47mPlease input your backup folder:" read BACKUPFOLDER #The script will make sure the folder exists if [-d $BACKUPFOLDER] then echo "You backup folder exists and will be used." else mkdir $BACKUPFOLDER if [-d $BACKUPFOLDER] then echo "Backup folder created successfully." else echo -e "I do not have the rights to create your backup folder.\nThis script will now exit." exit 1 #exit 1 is a command that exits the script with an error code fi fi #Request files to be backed up: echo -e "\e[30mWhich files do you want backed up?\e[39m\e[49m" read FILES if [-n $FILES] then cp -a $FILES $BACKUPFOLDER else echo "File does not exist." fi
این اسکریپت میگوید که پوشه پشتیبانی که وارد کردهاید، وجود ندارد، میتواند آن را ایجاد کند یا نمیتواند آن را ایجاد کند و این که شما هنگام وارد کردن نام فایلها رشتهای خالی وارد کردهاید یا نه.
سخن پایانی
هر چه بیشتر میآموزیم، میتوانیم با استفاده از قابلیتهای گستردهتر برای خلق راهحلهای جدید و نوآورانه برنامههای بهتری بنویسیم. در این سلسله مطالب راهنما ما توانستیم اسکریپت کاربرپسند خود را هرچه بیشتر بهبود و ارتقا دهیم.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دروس مهندسی کامپیوتر
- شل اسکریپت (Shell Script) روی VPS (بخش اول) — از صفر تا صد
- مجموعه آموزشهای برنامهنویسی
- آموزش بش اسکریپت در گنو/لینوکس
- اسکرپیتنویسی شل چیست و چرا مهم است؟
- ترمینال لینوکس و آنچه برای شروع به کار با آن باید بدانید
==