3. اولین اسکریپت
به عنوان اولین اسکریپت، یک اسکریپت مینویسیم که بگوید "Hello World" . بعد سعی خواهیم نمود بیشتر ازآنچه که در هر راهنمای آموزشی دیگری خواندهاید از این برنامه Hello World بیرون بکشیم :-)فایل (first.sh) را به صورت زیر ایجاد کنید :
first.sh
#!/bin/sh
# This is a comment!
echo Hello World # This is a comment, too!
سطر اول به یونیکس میگوید که این فایل باید توسط /bin/sh اجرا گردد . این محل استاندارد پوسته بورن، تقریباًدر همه سیستمهای یونیکس است . اگر شما از گنو-لینوکس استفاده میکنید، به طور معمول، /bin/sh یک پیوند نمادین به bash میباشد .
سطر دوم با یک کاراکتر ویژه : #
شروع میشود . این کاراکتر، سطر را به عنوان توضیح علامت میگذارد، و سطر توضیح به کلی توسط پوسته نادیده گرفته میشود .
تنها مورد استثناء موقعی است که بالاترین سطر فایل با
#!
شروع میشود - همان طور که در اسکریپت ما آمده است . این یک راهنمای مخصوص میباشد که یونیکس به طور ویژهای به آن عمل میکند . ،این به آن معنا است که حتی اگر شما از
csh، ksh، یا هر شل محاورهای دیگر هم استفاده میکنید، آنچه پس از این میآید باید توسط شل بورن تفسیر گردد .
یک اسکریپت پرل نیز به طور مشابهای با سطر
#!/usr/bin/perl
شروع میشود که به شل محاورهای شما بگوید، برنامهای که در ادامه میآید، باید توسط پرل اجرا گردد .مابرای برنامهنویسی پوسته بورن همواره از این سطر #!/bin/sh
استفاده میکنیم
سطر سوم یک دستور echo
، را با دو پارامتر، یا شناسه اجرا میکند -که اولی «Hello» و دومی «World» است.
توجه داشته باشید که فرمان echo به طور خودکار یک فاصله منفرد بین پارامترهایش قرار میدهد .
(مترجم: منظور آن است که فاصلههای بیش از یکی را حذف میکند )
علامت #
باز هم یک توضیح را نشانه گذاری میکند، علامت # و هر چیزی در ادامه آن توسط شل صرفنظر میشوند .
حالا با اجرای دستور chmod 755 first.sh
فایل متنی را اجرایی کنید و با اجرای ./first.sh
اسکریپت را اجرا کنید.
صفحه نمایش شما باید مشابه مورد زیر باشد:
$ chmod 755 first.sh
$ ./first.sh
Hello World
$
احتمالاً انتظار آن را داشتید! حتی میتوانید در خط فرمان، اینطور اجرا کنید :
$ echo Hello World
Hello World
$
حالا بیایید در اسکریپت تغییراتی بدهیم .
اول توجه کنید که دستور echo
فقط یک فاصله بین پارامترهایش میگذارد .
چندین فاصله بین «Hello» و «World» قرار دهید. انتظار دارید خروجی چگونه باشد؟ در مورد کاراکتر Tab در میان کلمات چطور ؟
در برنامهنویسی پوسته، همیشه اجرا کنید و نتیجه را ببینید .
این خروجی دقیقاً همانند دفعه قبل است! برنامه echo
را با دوشناسه فراخواندهایم، دستور فوق دیگر توجهی به cp
شکافهای بین شناسهها ندارد .
دوباره کد را تغییر میدهیم :
#!/bin/sh
# This is a comment!
echo "Hello World" # This is a comment, too!
این دفعه کار میکند . همانطور که احتمالاً - اگر تجربه ای از سایر زبانهای برنامهنویسی داشته باشید- انتظار دارید. کلید درک چگونگی اجرای دستورات پیچیدهتر و اسکریپتهای شل، در فهم و توانایی توضیح این مطلب میباشد: چرا؟
echo
حالا فقط با یک شناسه -رشته
"Hello World" - فرا خوانده شده است. دقیقاً این شناسه را در خروجی چاپ میکند .
در اینجا نکتهای که باید فهمیده شود آن است که پوسته شناسهها را قبل از آن که در اختیار برنامه فراخوانی شده قرار دهد، تفکیک مینماید. در این نمونه ، نقلقولها را برمیدارد و رشته را به عنوان یک شناسه در اختیار فرمان میگذارد .
به عنوان نمونه پایانی، اسکریپت پایین را تایپ کنید . سعی کنید قبل از اجرای آن، خروجیاش را پیشبینی کنید :
first2.sh
#!/bin/sh
# This is a comment!
echo "Hello World" # This is a comment, too!
echo "Hello World"
echo "Hello * World"
echo Hello * World
echo Hello World
echo "Hello" World
echo Hello " " World
echo "Hello \"*\" World"
echo `hello` world
echo 'hello' world
همه چیز همان طور است که پیشبینی نمودهاید؟ اگر نیست، نگران نشوید! اینها فقط کمی از چیزهایی هستند که ما در این راهنما پوشش میدهیم ... و بله، از فرمانهای قدرتمندتر از echo
استفاده خواهیم نمود!