یکی از راههای خوب برای یاد گرفتن یک چیز جدید ( صرف نظر از ماهیت اون چیز ) استفاده از تجربه بقیه و نگاه کردن به کاری هست که قبلا انجام شده، در برنامه نویسی این روش به شکل شدیدتری قابلیتهای خودش را نشان میدهد، گفته میشود یکی از بهترین روشهای یاد گرفتن تفکر سیستماتیک و متدهای برنامه نویسی دیدن کدهای خوب و تکرار کدها است . یعنی برنامه را تحلیل کنیم و دوباره بنویسیم. و چیزی که این روزها خیلی پیدا میشود، کدهایی هستند که با زبانهای مختلف نوشته شدهاند.
من بدلایلی در نظر دارم درباره برنامهنویسی در Bash لینوکس کمی صحبت کنم، نه با این عنوان که در برنامه نویسی Shell Script استاد هستم، به هیچ وجه! تنها بدلیل اشتراک گذاری مطالبی که در ادامه میآید با دوستانم .
من فرض میکنم که خواننده با دستورات ترمینال آشنایی داشته و میتواند دستورات را بصورت تکی یا ترکیبی استفاده کند، این مقاله درباره روش نوشتن یک Shell Script و تشریح دستورات کنترلی در Shell Script میباشد.
برای اجرای کارها در ترمینال لینوکس از دستورات Shell استفاده میشود، در صورتیکه نیاز به اجرای یک عمل روتین یا یک کار تکراری یا یک مجموعه کار پشت سرهم داشته باشیم، یکی از راه حلها برنامه نویسی و یک از سادهترین، قدرتمندترین و در دسترسترین محیطها برای نوشتن یک برنامه در لینوکس استفاده از Shell لینوکس و نوشتن یک Shell Script است. یک Shell Script از مجموعه دستورات Bash (یا هر Shell دیگه ) به همراه توضیحات (Comments) و دستورات کنترلی استفاده میکند. یک Shell Script با فرمت sh. ذخیره میشود، و با نوشتن دستور
sh foo.sh
اجرا میشود. در صورتیکه به Shell Script مجوز اجرایی بدهیم:
chmod +x foo.sh
به راحتی بصورت زیر قابلیت اجرا پیدا میکند:
./foo.sh
در صورتیکه در خط اول از Shebang استفاده کنیم و آدرس مفسر فایل اسکریپت را اعلام کنیم ( همانند روشی که در فایلهای py. استفاده میشود)،Shell Script ما قابلیت اجرایی خواهد یافت، ابتدا با دستور زیر محل قرارگیری مفسر (Bash) را پیدا میکنیم:
which bash
که احتمالا چیزی شبیه به این خواهد بود:
/usr/bin/bash
سپس این خط را به ابتدای اسکریپت خود اضافه میکنیم:
#!/usr/bin/bash
و ادامه برنامه را مینویسیم.
مرسوم شده که هر زبان برنامه نویسی جدید با برنامه !Hello World شروع بشود، اما من با این برنامه شروع نمیکنم و فقط تعدادی از دستورات کنترلی را در قالب برنامههای ساده مرور میکنم.
for LOOP
حلقه کنترلی for برای انجام یک ( مجموعه ) عمل به تعداد مشخص بکار میرود، مثلا ما نیاز داریم یک کار را ۱۰ بار تکرار کنیم، یا یک تعداد از دستورات را به تعدادی که کاربر مشخص کرده است انجام دهیم. یا تعداد فایلهای یک دایرکتوری را شمارش کرده و به تعداد آنها یک عمل را تکرار کنیم . در اینصورت استفاده از حلقه for ناگزیر خواهد بود :
for … in
برنامه زیر ۴ بار کد بین do و done را اجرا میکند .
for i in 1 2 3 4 do echo "Number $i" done
((for ((exp1, exp2, exp3
همان کد بالا با قالب ((for ((exp1, exp2, exp3
for (( i=1; i<=4; i++)) do echo "Number $i" done
خروجی کدهای بالا بعد از اجرای اسکریپت:
Number 1 Number 2 Number 3 Number 4
برنامه نمایش اعداد بر روی کنسول
#!/bin/bash for i in {1..25} do echo $i done
یا :
#!/bin/bash for ((i=1;i<=25;i+=1) do echo $i done
برنامه شمارش اعداد با step برابر با ۵ :
#!/bin/bash for i in {0..25..5} do echo $i done
برنامه شمارش معکوس از عدد ۲۵ تا ۱ با step برابر با ۵- :
#!/bin/bash for i {25..0..-5} do echo $i done
یک کاربرد جالب و خوب دستور for، قابلیت کارکردن با فایلهای خاص است، به عنوان مثال کد زیر تمام فایلهایی که فرمت sh. دارند را نمایش میدهد:
for file in ~/*.sh do echo $file done
برای استفاده از شرط باید ابزار لازم برای چک کردن شرط را داشته باشیم، مثلا عملگرهای مقایسهای،(==،<،>،=! و …) برای مقایسه ۲ پارامتر با هم مناسب هستند. برای آشنایی با عملگر ها اینجا و اینجا مطالب خوبی را ارائه کرده است.
برای دریافت داده توسط کاربر از دستور read استفاده میشود، مثلا
read word
یک ورودی از کاربر دریافت کرده و در متغیر word قرار میدهد. برای دسترسی به محتویات word میتوان از دستور
echo $word
استفاده کرد، در نوع داده محدودیتی وجود ندارد، داده میتواند یک عدد، یک رشته یا یک آرایه باشد. در صورتیکه نیاز به کار با آرایه دارید، میتوانید از سوئیچ a- بههمراه دستور read برای گرفتن مقادیر آرایه از کاربر استفاده کنید. همچنین دستور declare میتواند برای تعریف یک متغیر بکار رود . در صورتیکه این دستور به همراه سوئیچ a- بکار برده شود برای تعریف یک آرایه استفاده میشود.
برای دسترسی به المانهای مختلف یک آرایه بصورت زیر عمل میکنیم:
read -a colors echo "colors : ${colors[0]} , ${colors[1]} , ${colors[2]}"
برای ساخت یک حلقه از دستورات until و while نیز میتوان استفاده کرد .
#!/bin/bash COUNT=0 # bash until loop until [ $COUNT -gt 5 ]; do echo Value of count is: $COUNT let COUNT=COUNT+1 done
!/bin/bash COUNT=6 bash while loop while [ $COUNT -gt 0 ]; do echo Value of count is: $COUNT let COUNT=COUNT-1 done
برای استفاده از کاراکترهای خاص مثل $ باید این کاراکترها را بین ‘ ‘ قرار داد، برای استفاده از کاراکتر ‘ از ‘\ استفاده میشود.
همچنین کارایی کاراکتر ” نیز مانند ‘ است .
خب ! این پست خیلی کوتاه ( نسبت به مطالب گفته نشده ) تمام شد، بهترین کار آزمایش کدهای ساده بالا و ترکیب این برنامهها با دستورات جدید و ساخت برنامههای جدید است.
از ترمینال نترسید. توانایی و قدرتی که ترمینال به کاربر لینوکس میده بی نظیر و شگفت آوره . نوشتن این آموزش توی برنامه ام نبود، چون میدونستم مطالب نگفتهی زیادی باقی میمونه . اما به دلایلی برای آشنایی دوستان این رو نوشتم . امیدوارم کمی در پیدا کردن یک دیدگاه مثبت و یک درک صحیح به Shell Script کمک کنه .
برای خوندن مطالب همین مطالب البته کاملتر به linuxconfig یک سر بزنید .( بعضی کد ها از این سایت برداشت شده بودند)،
سایت TutorialsPoint مطالب خوبی در همه زمینه ها و از جمله Shell Scripting داره.
در این سایت هم درسهای ابتدایی برای شروع هست .