یک عملگر مقایسه باینری دو متغیر یا کمیت را مقایسه میکند. توجه نمایید که مقایسه عدد صحیح و مقایسه رشته هر کدام از یک مجموعه عملگرهای متفاوت استفاده میکنند.
-eq | مساوی است با | if [ "$a" -eq "$b" ] |
-ne | مساوی نیست با | |
-gt | بزرگتر است از | |
-ge | بزرگتر یا مساوی است با | if [ "$a" -ge "$b" ] |
-lt | کوچکتر از | if [ "$a" -lt "$b" ] |
-le | کوچکتر یا مساوی است با | |
< | کوچکتر از ( در داخل پرانتزهای دوگانه) | (("$a" < "$b")) |
<= | کوچکتر یا مساوی (داخل پرانتزهای دوگانه) | (("$a" <= "$b")) |
> | بزرگتر از (داخل پرانتزهای دوگانه) | (("$a" > "$b")) |
>= | بزرگتر یا مساوی با (داخل پرانتزهای دوگانه) | (("$a" >= "$b")) |
= | مساوی است با |
if [ "$a" = "$b" ]
توجه نمایید که فضای سفید = را قاببندی میکند. if [ "$a"="$b" ] معادل مورد فوق نیست. |
== | مساوی با |
if [ "$a" == "$b" ] یک مترادف برای = است. عملگر مقایسه == در میان یک bracket دوتایی بررسی،نسبت به داخل bracketهای منفرد متفاوت رفتار میکند.
[[ $a == z* ]] # [[ $a == "z*" ]] # [ $a == z* ] # [ "$a" == "z*" ] # # |
!= | مساوی نیست با |
if [ "$a" != "$b" ] این عملگر در داخل یک ساختار [[ ... ]] انطباق الگو را به کار میبرد. |
< | کوچکتر از، در ترتیب الفبایی ASCII |
if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ] توجه نمایید که داخل یک ساختار [ ] لازم است < به صورت escaped باشد. |
> | بزرگتر از، در ترتیب الفبایی ASCII |
if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ] توجه کنید که در درون یک ساختار [ ] لازم است > با کاراکتر گریز پوشش داده شود. برای یک کاربرد از این عملگر مثال 27-11 را ببینید. |
-z | رشته تهی است، یعنی، طول آن صفر است |
String='' # if [ -z "$String" ] then echo "\$String is null." else echo "\$String is NOT null." fi # |
-n | رشته تهی نیست. |
بررسی -n نیاز دارد که رشته داخل bracketهای تست نقلقولی باشد. به کار بردن یک رشته غیر نقلقولی با -z، یا حتی رشته غیر نقلقولی به تنهایی در bracketهای تست ( مثال 7-6 را ببینید) معمولاً کار میکند، اگر چه این یک شیوه نا امن است. همیشه رشته مورد بررسی را نقلقولی کنید. [1] |
مثال 7-5. مقایسههای رشتهای و حسابی
#!/bin/bash a=4 b=5 # # #+ # #+ # echo if [ "$a" -ne "$b" ] then echo "$a is not equal to $b" echo "(arithmetic comparison)" fi echo if [ "$a" != "$b" ] then echo "$a is not equal to $b." echo "(string comparison)" fi # echo exit 0
مثال 7-6. بررسی آنکه آیا یک رشته تهی است
#!/bin/bash # # # # # if [ -n $string1 ] # then echo "String \"string1\" is not null." else echo "String \"string1\" is null." fi # # echo # if [ -n "$string1" ] # then echo "String \"string1\" is not null." else echo "String \"string1\" is null." fi # echo if [ $string1 ] # then echo "String \"string1\" is not null." else echo "String \"string1\" is null." fi # # # # # # # echo string1=initialized if [ $string1 ] # then echo "String \"string1\" is not null." else echo "String \"string1\" is null." fi # # string1="a = b" if [ $string1 ] # then echo "String \"string1\" is not null." else echo "String \"string1\" is null." fi # exit 0 #
#!/bin/bash # # E_NOARGS=85 E_NOTFOUND=86 E_NOTGZIP=87 if [ $# -eq 0 ] # # then echo "Usage: `basename $0` filename" >&2 # exit $E_NOARGS # fi filename=$1 if [ ! -f "$filename" ] # then echo "File $filename not found!" >&2 # exit $E_NOTFOUND fi if [ ${filename##*.} != "gz" ] # then echo "File $1 is not a gzipped file!" exit $E_NOTGZIP fi zcat $1 | more # # exit $? # # #+
-a | and منطقی |
exp1 -a exp2 در صورتیکه exp1 و exp2 هر دو صحیح باشند، صحیح را برگشت میدهد. |
-o | or منطقی |
exp1 -o exp2 در صورتی صحیح برگشت میدهد که هر کدام از exp1 یا exp2 صحیح باشد. |
اینها مشابه عملگرهای مقایسه && و || پوسته Bash، استفاده شده در bracketهای دوتایی هستند.
[[ condition1 && condition2 ]]
عملگرهای -o و -a با فرمان test و یا در داخل bracketهای منفرد تست کار میکنند.
if [ "$expr1" -a "$expr2" ] then echo "Both expr1 and expr2 are true." else echo "Either expr1 or expr2 is false." fi
اما، به طوریکه rihad اشاره میکند: [ 1 -eq 1 ] && [ -n "`echo true 1>&2`" ] # [ 1 -eq 2 ] && [ -n "`echo true 1>&2`" ] # # # [ 1 -eq 2 -a -n "`echo true 1>&2`" ] # # # [[ 1 -eq 2 && -n "`echo true 1>&2`" ]] # # # |
برای دیدن عملگرهای مقایسه مرکب در عمل، به مثال 8-3، مثال 27-17، و مثال A-29 مراجعه کنید.
[1] | به طوریکه S.C. اشاره میکند، در یک بررسی مرکب، حتی نقلقول رشته متغیر شاید کفایت نکند. [ -n "$string" -o "$a" = "$b" ] در صورتیکه $string تهی باشد، در برخی از نگارشهای Bash میتواند موجب یک خطابشود. روش بیخطر، الحاق نمودن یک کاراکتر اضافی به متغیرهای تهی احتمالی است، [ "x$string" != x -o "x$a" = "x$b" ] ( "x"ها با هم خنثی میشوند). |