| تخصیص متغیر | ارزشگذاری یا تغییر محتوای یک متغیر |
| = | عملگر تخصیص همه منظوره، که برای هر دو تخصیص رشتهای و حسابی عمل میکند. 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] | البته آثار جانبی، نتایج ناخواسته -- و معمولاً نامطلوب -- هستند. |