تخصیص متغیر | ارزشگذاری یا تغییر محتوای یک متغیر |
= | عملگر تخصیص همه منظوره، که برای هر دو تخصیص رشتهای و حسابی عمل میکند. var=27 category=minerals # عملگر "=" تخصیص را با عملگر = تست اشتباه نکنید. # if [ "$string1" = "$string2" ] then command fi # |
+ | جمع |
- | تفریق |
* | ضرب |
/ | تقسیم |
** | توان
# let "z=5**3" # echo "z = $z" # |
% | modulo، یا mod ( باقیمانده یک عملیات تقسیم صحیح را برگشت میدهد) bash$ expr 5 % 3 25/3 = 1 است با باقیمانده 2 این عملگر در تولید اعداد داخل یک محدوده خاص ( مثال 9-11 و مثال 9-15 را ببینید) و قالببندی خروجی برنامه ( مثال 27-16 و مثال A-6 را ببینید) سودمند واقع میشود. حتی میتواند برای تولید اعداد اول به کار برود (مثال A-15 را ببینید). Modulo به طور شگفتانگیزی در دستورالعملهای عددی ظاهر میشود. مثال 8-1. بزرگترین مقسوم علیه مشترک #!/bin/bash # # # #+ # # #+ #+ #+ # # # #+ # # ARGS=2 E_BADARGS=85 if [ $# -ne "$ARGS" ] then echo "Usage: `basename $0` first-number second-number" exit $E_BADARGS fi # ------------------------------------------------------ gcd () { dividend=$1 # divisor=$2 # # remainder=1 # #+ until [ "$remainder" -eq 0 ] do # let "remainder = $dividend % $divisor" dividend=$divisor # divisor=$remainder done # } # gcd $1 $2 echo; echo "GCD of $1 and $2 = $dividend"; echo # # # #+ # exit 0 |
+= | افزایش-مساوی (افزایش مقدار ثابت به متغیر) [1] let "var += 5" به این منجر میشود که 5 به var اضافه شود. |
-= | تفریق-مساوی (تفریق مقدار ثابت از متغیر) |
*= | ضرب-مساوی (ضرب مقدار ثابت در متغیر) let "var *= 4" منجر به این میگردد که var ضرب در 4 بشود. |
/= | تقسیم-مساوی (تقسیم متغیر بر مقدار ثابت) |
%= | باقیمانده-مساوی (باقیمانده تقسیم متغیر بر مقدار ثابت) عملگرهای حسابی بیشتر اوقات در یک عبارت expr یا let واقع میشوند. مثال 8-2. کاربرد عملگرهای حسابی #!/bin/bash # n=1; echo -n "$n " let "n = $n + 1" # echo -n "$n " : $((n = $n + 1)) # #+ echo -n "$n " (( n = n + 1 )) # # echo -n "$n " n=$(($n + 1)) echo -n "$n " : $[ n = $n + 1 ] # #+ # echo -n "$n " n=$[ $n + 1 ] # #* # echo -n "$n " # # let "n++" # echo -n "$n " (( n++ )) # echo -n "$n " : $(( n++ )) # echo -n "$n " : $[ n++ ] # echo -n "$n " echo exit 0 |
متغیرهای صحیح در نگارشهای قدیمیتر Bash، اعداد صحیح بلند با علامت (32-bit) در محدوده -2147483648 تا 2147483647 بودند. عملیاتی که متغیری خارج از این محدوده دریافت میکرد، یک نتیجه اشتباهآمیز ارایه میداد.
echo $BASH_VERSION # a=2147483646 echo "a = $a" # let "a+=1" # echo "a = $a" # let "a+=1" # echo "a = $a" # # # + # + در نتیجه Bash از نگارش >= 2.05b از اعداد صحیح ۶۴ بیتی پشتیبانی میکند. |
Bash حساب ممیز شناور را نمیفهمد. با اعداد شامل نقطه اعشار به عنوان رشته رفتار میکند.
a=1.5 let "b = $a + 1.3" # # # echo "b = $b" # در اسکریپتهایی که به محاسبات اعشاری یا توابع کتابخانهای ریاضی نیاز دارند از bc استفاده کنید. |
عملگرهای بیتی. عملگرهای بیتی به ندرت در اسکریپتهای پوسته ظهور می کنند. به نظر میرسد کاربرد عمده آنها برای دستکاری و بررسی کمیتهای خوانده شده از پورتها یا سوکتها باشد. «وارونهسازی وضعیت بیتها» بیشتر برای زباهای ترجمه شونده، از قبیل C و C++ که دسترسی مستقیم به سختافزار سیستم را فراهم میکنند مناسب است. به هر حال، ابتکار vladz در به کار بردن عملگرهای بیتی در اسکریپت base64.sh او (مثال A-54) را ملاحظه نمایید.
<< | انتقال به چپ بیتی (ضرب در 2 برای هر نقلمکان) |
<<= | left-shift-equal let "var <<= 2" موجب میگردد var به اندازه 2 بیت به سمت چپ نقلمکان کند (ضربدر 4) |
>> | نقلمکان بیتی به راست (تقسیم بر 2 برای هر نقلمکان) |
>>= | right-shift-equal (برعکس <<= است) |
& | AND بیتی |
&= | AND-equal بیتی |
| | OR بیتی |
|= | OR-equal بیتی |
~ | نفی بیتی |
^ | XOR بیتی |
^= | XOR-equal بیتی |
! | نفی if [ ! -f $FILENAME ] then ... |
&& | و if [ $condition1 ] && [ $condition2 ] # # if [[ $condition1 && $condition2 ]] # # |
|| | یا
if [ $condition1 ] || [ $condition2 ] # # if [[ $condition1 || $condition2 ]] # # مثال 8-3. بررسیهای شرط مرکب با استفاده از && و || #!/bin/bash a=24 b=47 if [ "$a" -eq 24 ] && [ "$b" -eq 47 ] then echo "Test #1 succeeds." else echo "Test #1 fails." fi # عملگرهای && و || در یک مضمون حسابی نیز مورد استفاده واقع میشوند. bash$ echo $(( 1 && 2 )) $((3 && 0)) $((4 || 0)) $((0 || 0)) 1 0 1 0 |
, | عملگر کاما عملگر کاما دو یا چند عملیات حسابی را بهم زنجیر میکند. تمام عملکردها (با آثار جانبی محتمل) ارزیابی میشوند. [2] let "t1 = ((5 + 3, 7 - 1, 15 - 4))" echo "t1 = $t1" # # let "t2 = ((a = 9, 15 / 3))" # echo "t2 = $t2 a = $a" # عملگر کاما اساساً در حلقههای for مورد استفاده واقع میشود. مثال 11-13 را ببینید. |
[1] | در یک مضمون متفاوت، += میتواند به عنوان یک عملگر الحاق رشته به کار برود. این میتواند برای ویرایش متغیرهای محیط سودمند باشد. |
[2] | البته آثار جانبی، نتایج ناخواسته -- و معمولاً نامطلوب -- هستند. |