اسکریپت نویسی شل لینوکس برای وبمسترها – قسمت۲ : در قسمت قبل کار با متغیر ها و ارتباط با کاربر از طریق آرگومان ها و خط فرمان را یادگرفتیم.
در این قسمت قصد داریم ویرایش فایل های متنی با استفاده از اسکریپت نویسی را توضیح دهیم, میدانید که بیشتر سرویس های لینوکس دارای یک فایل متنی config هستند که در طول مدیریت و کانفیگ سرور بارها باید آنها را ویرایش کنید, برای خودکار کردن روند کانفیگ سرویس ها باید یاد بگیریم با استفاده از اسکریپت نویسی تغییرات لازم را در این فایل ها اعمال کنیم.
یکی از بهترین ابزار text manioulation در یونیکس و لینوکس ابزار sed است, در ادامه با برخی از کاربرد های مفید این ابزار آشنا میشوید:
طرز کار بدین صورت است:
Sed ‘command’ file
مثلا کامند
s/a/A
شامل سه قسمت است; s اول substitute به معنی جایگزینی, که باعث میشود در فایل داده شده, a ها را با A جای گزین کند. به مثال زیر توجه کنید:
sed ‘s/a/A/’ text1
با اجرای دستور بالا اولین ‘a’ ی هر خط موجود در متن فایل text1 به ‘A’ تبدیل میشوند.
یعنی اگر در یک خط نوشته banana موجود باشد, تبدیل به bAnana خواهد شد. در واقع فقط روی اولین مورد پیدا شده در هر خط, عمل جایگزینی را انجام میدهد. در صورتی که میخواهید تمام یافته را ویرایش کند, در آخر کامند یک g بگذارید.
دستور
Sed ‘s/a/A’ text1
باعث خواهد شد تمام کاراکتر های a به A تبدیل شود, یعنی در خروجی banana به bAnAnA تبدیل خواهد شد.
اسکریپت نویسی شل لینوکس برای وبمسترها – بخش دوم
توجه کنید که در این حالت خروجی به خط فرمان ارسال خواهد شد و در فایل هیچ تغییر اعمال نمیشود, برای اعمال تغییرات در فایل از پارامتر های i و r استفاده کنید. یعنی:
Sed –i –r ‘s/a/A’ text1
لازم نیست گزینه مورد جستجو یک کاراکتر باشد, میتوانید از sed بخواهید apple را جایگزین banana کنید.
Sed –i –r ‘s/banana/apple’ text1
حالا بیایید وارد بحث تخصصی خودمان شویم:
اولین کاری که هنگام کانفیگ سرور انجام میدهید چیست؟ ست کردن آی پی!
در سرور های ردهت معمولا فایل کانفیگ آی پی در مسیر
/etc/sysconfig/network-scripts/ifcfg-eth0
قرار دارد
محتوی این فایل چیزی مانند:
DEVICE=eth0BOOTPROTO=noneONBOOT=yesNETWORK=10.0.1.0NETMASK=255.255.255.0IPADDR=10.0.1.27USERCTL=no
خواهد بود.
عوض کردن کردن مقدار IPADDR
برای عوض کردن کردن مقدار IPADDR با استفاده از sed چه کار کنیم؟
البته با دستور
Sed –I –r ‘s/IPADDR=10.0.1.27/IPADDR=192.168.4.1’ /etc/sysconfig/network-scripts/ifcfg-eth0
میتوانیم این کار را انجام دهیم ولی به شرط آنکه مقدار ۱۰٫۰٫۱٫۲۷ همیشه ثابت باشد, اما هدف اسکریپت نویسی این است که بتوانیم آنرا روی سرور های مختلف با تنظیمات مختلف اجرا کنیم, پس بیایید از sed بخواهیم هر سطری که با IPADDR= شروع شده را با IPADDR=192.168.4.1 که آی پی مورد نظر ماست جایگذین کند.
دستور به شکل زیر خواهد بود:
sed -i -r ‘s/(^IPADDR=(.*)$)/IPADDR=192.168.4.1/’ /etc/sysconfig/network-scripts/ifcfg-eth0
علامت ^ نشانگر اول سطر, .* نشان گر “هر چیزی” و $ نشانگر آخر سطر میباشد, به اینگونه کد نویسی برای جستجو در متون Regular Expression میگوییم که برای کاربران خط فرمان لینوکس یادگیری آنها بسیار ارزشمند خواهد بود و ما نیز در ادامه بدان خواهیم پرداخت.
با عبارت بالا از ابزار sed خواستیم وقتی به موردی رسید که اول سطر آن عبارت IPADDR= باشد, بدون توجه به ادامه آن تا آخر سطر, کل آن سطر را با “IPADDR=192.168.4.1” جایگزین کند.
برای ست کردن gateway نیز میتوان به همین منوال پیش رفت, مثال تنظیم gateway را با کمک گرفتن از متغیر ها که در قسمت قبل توضیح داده شد ادامه میدهیم.
echo -n “Enter Default Gateway “
read gatw
sed -i -r ‘s/(^GATEWAY=(.*)$)/GATEWAY=’$gatw’/’ /etc/sysconfig/network-scripts/ifcfg-eth0
در واقع آی پی gateway را از کاربر دریافت کرده و در متغیر gatw قرار میدهیم.
سپس متغیر را به صورت ‘$gatw’ در دستوری که به
sed ارسال میشود قرار میدهیم.
اگر میخواستیم یک آی پی مشخص را تعیین کنیم به جای
‘$gatw’ شماره آی پی را مینوشتیم(درست مثل مثال قبل)
حالا دیگر میتوانید اسکریپتی بنویسید که عمل تنظیم آی پی را بدون نیاز به باز کردن فایل ifcfg در سیستم های پایه ردهت انجام دهد.
در قسمت های بعد عبارات شرطی را توضیح خواهیم داد.