در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement

سلام و وقت بخیر. در این جلسه در مورد ساختار شرط if صبت میکنیم. منطق if در زبان های برنامه نویسی مختلف یکسان است. یک یا چند شرط به عنوان ورودی به if میدیهم، اگر برقرار باشند یا نباشند دستورات خاصی اجرا میشود. به قطعه کد زیر دقت کنید.

#!/bin/bash

if (( $# < 1 ))
then
        echo "Usage : $0 <name> "
        exit 1
fi

echo "Hello $1"

exit 0

این شرط چک میکند که آیا هیچ پارامتری به برنامه ارسال شده یانه ؟؟ اگر پارامتری ارسال نشده، پیامی میدهد و با کد خطا از برنامه خارج میشود. در عیر این صورت ادامه برنامه اجرا میشود. اون fi به معنای خاتمه قطعه کد if است.

[mohammad@CentOS6 bin]$ if.sh Mohammad
Hello Mohammad
[mohammad@CentOS6 bin]$ if.sh
Usage : /home/mohammad/bin/if.sh <name> 
[mohammad@CentOS6 bin]$ 

راستش انقدر if پیج و خم داره که فک کنم بشه واسش به دوره جدا کامل نوشت. یه کوچولو اینجا مبحثشو باز میکنیم، بقیشو خودتون مطالعه کنید.

دستور if اسنفاده بسیار گسترده ای داره، مثلا برای چک کردن اینکه یک فایل وجود دارد یا خیر و یا اینکه قایبل خواندن است یا خیر از نمونه کئ زیر استفاده میکنیم.

if [ -r somefile ]; then
content=$(cat somefile)
elif [ -f somefile ]; then
echo “The file ‘somefile’ exists but is not readable to the script.”
else
echo “The file ‘somefile’ does not exist.”
fi

کد بالا ابتدا با سویچ r- چک میکند که فایل قابل خواندن ( readable ) هست یا نه. با سویچ f- چک میکند که فایل وجود دارد یا نه. در شرط اول، اگر برقرار باشد، فایل را باز میکند و درون متغیر content میریزد.

برای چک کردن محتوای یک متغیر و مقایسه مقدار آن از سویچ های زیر استفاده کنید.

آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement

حالا یه سری مثال با اینا ببینید:

value=$( grep -ic "Mohammad" /etc/passwd )
if [ $value -eq 1 ]
then
  echo "I found Mohammad"
else
  echo "I didn't find Mohammad"
fi
value=$( grep -ic "Mohammad" /etc/passwd )
if [ $value -eq 1 ]
then
  echo "I found one Mohammad"
elif [ $value -gt 1 ]
then
  echo "I found multiple Mohammad"
else
  echo "I didn't find any Mohammad"
fi
read -p "Enter value of i :" i

if [ $i -eq 10 ]
then
    echo "Value of i is 10"
else
    echo "Value of i is not equal to 10"
fi
read -p "Enter value of i :" i
read -p "Enter value of j :" j
read -p "Enter value of k :" k

if [ $i -gt $j ]
then
    if [ $i -gt $k ]
    then
        echo "i is greatest"
    else
        echo "k is greatest"
    fi
else
    if [ $j -gt $k ]
    then
        echo "j is greatest"
    else
	echo "k is greatest"
    fi
fi

حالا مثال های خیلی متنوعی میشه ساخت از اینا. جدول زیر یه دید کلی از سویج های if نشون میده.

File tests
Operator syntax	Description	
-a <FILE>	True if <FILE> exists. :!: (not recommended, may collide with -a for AND, see below)	
-e <FILE>	True if <FILE> exists.	
-f <FILE>	True, if <FILE> exists and is a regular file.	
-d <FILE>	True, if <FILE> exists and is a directory.
-c <FILE>	True, if <FILE> exists and is a character special file.	
-b <FILE>	True, if <FILE> exists and is a block special file.	
-p <FILE>	True, if <FILE> exists and is a named pipe (FIFO).	
-S <FILE>	True, if <FILE> exists and is a socket file.	
-L <FILE>	True, if <FILE> exists and is a symbolic link.	
-h <FILE>	True, if <FILE> exists and is a symbolic link.	
-g <FILE>	True, if <FILE> exists and has sgid bit set.	
-u <FILE>	True, if <FILE> exists and has suid bit set.	
-r <FILE>	True, if <FILE> exists and is readable.	
-w <FILE>	True, if <FILE> exists and is writable.	
-x <FILE>	True, if <FILE> exists and is executable.	
-s <FILE>	True, if <FILE> exists and has size bigger than 0 (not empty).	
-t <fd>	True, if file descriptor <fd> is open and refers to a terminal.	
<FILE1> -nt <FILE2>	True, if <FILE1> is newer than <FILE2> (mtime). :!:	
<FILE1> -ot <FILE2>	True, if <FILE1> is older than <FILE2> (mtime). :!:	
<FILE1> -ef <FILE2>	True, if <FILE1> and <FILE2> refer to the same device and inode numbers. :!:	

String tests
Operator syntax	Description
-z <STRING>	True, if <STRING> is empty.
-n <STRING>	True, if <STRING> is not empty (this is the default operation).
<STRING1> = <STRING2>	True, if the strings are equal.
<STRING1> != <STRING2>	True, if the strings are not equal.
<STRING1> < <STRING2>	True if <STRING1> sorts before <STRING2> lexicographically (pure ASCII, not current locale!). Remember to escape! Use \<
<STRING1> > <STRING2>	True if <STRING1> sorts after <STRING2> lexicographically (pure ASCII, not current locale!). Remember to escape! Use \>

Arithmetic tests
Operator syntax	Description
<INTEGER1> -eq <INTEGER2>	True, if the integers are equal.
<INTEGER1> -ne <INTEGER2>	True, if the integers are NOT equal.
<INTEGER1> -le <INTEGER2>	True, if the first integer is less than or equal second one.
<INTEGER1> -ge <INTEGER2>	True, if the first integer is greater than or equal second one.
<INTEGER1> -lt <INTEGER2>	True, if the first integer is less than second one.
<INTEGER1> -gt <INTEGER2>	True, if the first integer is greater than second one.

Misc syntax
Operator syntax	Description
<TEST1> -a <TEST2>	True, if <TEST1> and <TEST2> are true (AND). Note that -a also may be used as a file test (see above)
<TEST1> -o <TEST2>	True, if either <TEST1> or <TEST2> is true (OR).
! <TEST>	True, if <TEST> is false (NOT).
( <TEST> )	Group a test (for precedence). Attention: In normal shell-usage, the "(" and ")" must be escaped; use "\(" and "\)"!
-o <OPTION_NAME>	True, if the shell option <OPTION_NAME> is set.
-v <VARIABLENAME>	True if the variable <VARIABLENAME> has been set. Use var[n] for array elements.
-R <VARIABLENAME>	True if the variable <VARIABLENAME> has been set and is a nameref variable (since 4.3-alpha)

برای استفاده از امکان AND و OR کردن شرط ها با هم بهتر است از || به معنی AND و && به معنی OR استفاده کنید.

if [[ condition1 ]] && [[ condition2 ]]; then    //OR

	"do something"
fi


if [[ condition1 ]] || [[ condition2 ]]; then    //AND

	"do something"
fi

if [[ condition1 ]] && [[ condition2 ]]	|| [[ condition3 ]] && [[ condition4 ]]	; then    //OR + AND

	"do something"
fi

شاید دیده باشید که بعضی جاها در if از [ ] یا [[ ]] یا (( )) یا ( ) استفاده میکنند. هر کدام از اینا استفاده خاص خود را دارند.

1- [ ]

برای کار با "رشته ها" و "فایل ها" و "مقایسه و محاسبات ریاضی"

2- [[ ]]

خاصیت های [ ] را دارد ولی بهبود یافته آن است. تفاوت های کوچک کلیدی با هم دارند. بررسی تفاوت ها از حوصله این جلسه خیلی خارجه !!!

3- (( ))

بیشتر برای مقایسه ریاضی استفاده میشود. این از korn shell گرفته شده.

ضمیمه : دلم نمیاد مورد دوم رو بدون مثال ولش کنم!!! مثلا اینو ببینید:

if [ -a *.sh ]; then

اگه از همچین فایلی "یکی" وجود داشته باشه true برمیگردونه و اگه اصلا وجود نداشته باشه false برمیگردونه، اگه بیشتر از یکی وجود داشته باشه error میده کلا برنامه !!! برای همین در این مورد باید از این یکی استفاده کنیم که اگه چند تا فایل وجود داشت بتونه تشخیص بده:

if [[ -a *.sh ]]; then

همانطور که گفتم دستور if واسه خودش یه دورس... یه اشاره کوچیکی ازش اینجا کردیم. امیدوارم مفید بوده باشه.

پایان قسمت سوم از بخش دوم

نویسنده : سید محمد باقر موسوی

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#دوره_آموزشی_linux_فارسی #نوشتن_shell_script_در_لینوکس #آموزش_لینوکس_فارسی #آموزش_linux_مقدماتی #آموزش_shell_scripting #آموزش_دستورات_مقدماتی_لینوکس #آموزش_shell_scripting_در_لینوکس #دوره_آموزشی_shell_scripting_در_لینوکس #نوشتن_یک_shell_script_ساده
عنوان
1 آموزش لینوکس : مدیریت سیستم : قسمت 1 : Shell سفارشی : متغیرها رایگان
2 آموزش لینوکس : مدیریت سیستم قسمت 2 : Shell سفارشی : تنظیمات Shell رایگان
3 آموزش لینوکس : مدیریت سیستم : قسمت 3 : Shell سفارشی : Aliases رایگان
4 آموزش لینوکس : مدیریت سیستم : قسمت 4: Shell سفارشی: Login Scripts رایگان
5 آموزش لینوکس : مدیریت سیستم : قسمت 5 : ایجاد اسکریپت رایگان
6 آموزش لینوکس : مدیریت سیستم : قسمت 5 : Read User Input رایگان
7 آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement رایگان
8 آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement رایگان
9 آموزش لینوکس : مدیریت سیستم : قسمت 8 : Loops رایگان
10 آموزش لینوکس : مدیریت سیستم : قسمت 9 : Managing Users رایگان
11 آموزش لینوکس : مدیریت سیستم : قسمت 10 : Managing Groups رایگان
12 آموزش لینوکس : مدیریت سیستم : قسمت 11 : ارتباط با اکتیودایرکتوری رایگان
13 آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP رایگان
14 آموزش لینوکس : مدیریت سیستم : قسمت 13 : Cron AnaCron و Batch رایگان
15 آموزش لینوکس : مدیریت سیستم : قسمت 14 : آشنایی با IPTables رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....