N I L A D I C سه شنبه 22 مرداد 1392 01:07 ب.ظ نظرات ()

shell script چیست؟

دستورهای shell که داخل یه فایل می‌نویسیم تا پشت سر هم اجرا بشن (مثل فایل‌های Bat. و Cmd. در MS Win/DOS )

test.sh:

echo "Hello World!" 
echo "Salam be jahan!"

برای اجرا باید دستوری مثل sh test.sh بنویسیم اگه بخوایم که فایل text تبدیل به فایل اجرایی بشه در اول فایل خط

#!/bin/sh

رو وارد کنیم و فایل رو با دستور

chmod +x test.sh 

به فایل اجرایی تبدیل کنیم بعد از اون می‌تونیم فایل رو مثل فایل‌های اجرایی دیگه اجرا کنیم:

./test.sh 

نوشتن comment در برنامه

با گذاشتن علامت # در ابتدای هر خط ، آن خط از برنامه comment می شود البته !# یک حالت استثناست .

پایان خط در shell

  • اول بگم که هر جا خواستیم به خط جاری پایان بدیم و ادامه‌ی اون رو توی خط بعدی بنویسیم از \ استفاده می‌کنیم:

echo \ 
"Salam"

  • دوم هر کجا که به خط بعد رفتیم معادل ; حساب می‌شه و بلعکس. این دو قسمت معادلند:

if true 
then
        echo "Condition is true"
fi

if true; then echo "Condition is true"; fi

متغییرها

متغییرها به صورت name=value اختصاص داده می‌شوند و با name$ فراخوانی می‌شوند.

myname="Arman" 
echo "My name is $myname"

دستور read

با دستور read می‌تونیم از ورودی متغییرها رو بخونیم

read varname 

بلوک if

ساختار if به صورت زیر است:

if condition 
then commands
[elif condition
then commands]
[else commands]
fi

به جای condition شرط را وارد می‌کنیم و جای commands دستورات رو. قسمت‌های elif و else اختیاری هستند برای نوشتن conditionهای مختلف از برنامه‌ی test استفاده می‌کنیم به دو صورت می‌تونیم از test استفاده کنیم:

  • test condition
  • [condition ]

مثال:

read name 

if [ $name = "Arman" ]
then
        echo "Your name is Arman"
elif [ $name = "Mehdi" ] # ;)
then
        echo "Your name is Mehdi"
else
        echo "I dont know you"
fi

shell شرط ورودی رو اجرا می‌کنه و اگر مقدار صفر رو برگردونند دستورات رو اجرا می‌کنه و اگر غیر صفر بود اجرا نمی‌کنه (یا else رو اجرا می‌کنه)

بهتره این‌جوری بگم که برعکس زبان‌هایی مانند خانواده‌ی C که صفر برابر False (غلط) و غیر صفر برابر True (درست) هست توی shell صفر برابر True و غیر صفر برابر False هست

پارامترهای مختلف test

دستور test پارامترهای زیادی داره بعضی از اون‌ها رو نوشتم: exp = عبارت str = رشته int = عدد صحیح file = اسم فایل

!exp اگر exp غلط باشد (not)

exp1 -a exp2 اگر exp1 و exp2 هردو درست باشند (and)

exp1 -o exp2 اگر exp1 یا exp2 یا هردو درست باشند (or)

str اگر طول str ناصفر باشد

str1 = str2 اگر str1 برابر str2 باشد

str1 != str2 اگر str1 مخالف str2 باشد

int1 -eq int2 اگر int1 برابر int2 باشد

int1 -nq int2 اگر int1 مخالف int2 باشد

int1 -gt int2 اگر int1 بزرگ‌تر از int2 باشد

int1 -ge int2 اگر int1 بزرگ‌تر یا مساوی int2 باشد

int1 -lt int2 اگر int1 کوچک‌تر از int2 باشد

int1 -le int2 اگر int1 کوچک‌تر یا مساوی int2 باشد

-e file اگر file وجود داشته یاشد

-d file اگر file یک دیرکتوری باشد

-f file اگر file وجود داشته باشد و یک فایل معمولی باشد

برای اطلاعات بیشتر به man test مراجعه کنید