1.算术操作符:
= 变量赋值。
在if/[]/()中,判断是否相等
+ 加法
- 减法
* 乘法
/ 除法
** 幂运算
% 取模
+= 加等于
-= 减等于
*= 乘等于
/= 除等于
%= 取模赋值
例如:
let "z=5"
let "$z+=5" #错误,应该为 let "z+=5"
let "z=$z"
n=1;echo -n "$n"
let "n=$n+1" #let "n=n+1"也可
echo -n "$n"
:$((n=$n+1)) #:是必需的,如果没有:的话,Bash将尝试把“$((n=$n+1))”解释成一个命令
echo -n "$n"
((n=n+2))
echo -n "$n"
n=$(($n+1))
echo -n "$n"
:$[n=$n+1] #:是必需的,如果没有:的话,Bash将尝试"$[n=$n+1]"解释成一个命令,n为字符串时,这句话也能执行
echo -n "$n"
n=$[$n+1] #n为字符串时,也能执行,尽量避免使用这种方法
echo -n "$n"
let "n++" #let "++n"也可以
echo -n "$n"
:$((n++)) #:$((++n))也可以
echo -n "$n"
:$[n++] #:$[++n]
echo -n "$n"
exit 0
注意:在bash中,不支持浮点数
2.位操作符:
<< 左移1位
<<=n 左移n位
例如 let "var <<=2" #左移2位,相当于*4
>> 右移1位
>>=n 右移n位
& 按位与
&= 按位与等于
| 按位或
|= 按位或等于
~ 按位非
^ 按位异或
^= 按位异或等于
3.逻辑操作符:
&& 逻辑与
例如
if [ $condition1 ] && [ $condition2 ]
#与if [ $condition1 -a $condition2 ]相同,如果condition1和condition2都为true则返回true
if [[ $condition1 && $condition2 ]]
#也可以
#但&&不能用在[ ]里面
|| 逻辑或
例如
if [ $condition1 ] || [ $condition2 ]
#与if [ $condition1 -o $condition2 ]相同,如果condition1和condition2中,有一个为true则返回true
if [[ $condition1 || $condition2 ]]
#也可以
#||不能用在[ ]中
例如:
#!/bin/bash
a=24
b=47
if [ "$a" -eq 24 ] && [ "$b" -eq 47 ]
then
echo "Test #1 succeds"
else
echo "Test #1 fails"
fi
#错误的方法: if [ "$a" -eq 24 && "$b" -eq 47 ]
#bash尝试执行[ "$a" -eq 24,没有找到"]",所以失败
#如果使用 [[ "$a" -eq 24 && "$b" -eq 47 ]]就可以工作
if [ "$a" -eq 98 ] || [ "$b" -eq 47 ]
then
echo "Test #2 succeds"
else
echo "Test #2 fails"
fi
#使用 -a和-o选项
if [ "$a" -eq 24 -a "$b" -eq 47 ]
then
echo "Test #3 succeds"
else
echo "Test #3 fails"
fi
if [ "$a" -eq 98 -o "$b" -eq 47 ]
then
echo "Test #4 succeds"
else
echo "Test #4 fails"
fi
&&和||,也能在算术运算中使用:
echo $((1&&2)) $((3&&0)) $((4||0)) $((0||0))
输出 1 0 1 0
4.混杂操作:
, 逗号操作,可以连接2个或多个算术运算,所有的操作都会被执行,但只有最后一个操作作为表达式的结果
let "t1=((5+3,7-1,15-4))"
echo "t1=$t1" #t1=11
let "t2=((a=9,15/3))"
echo "t2=$t2 a=$a"
#t2=5 a=9
5.数字常量的处理:
#10进制,默认
let "dec=32"
echo "$dec" #32
#8进制,以0(零)开头
let "oct=032"
echo "$oct" #26
#16进制:以‘0x’或‘0X’开头
let "hex=0x32"
echo "$hex" #50
#其它进制:2到64进制
# BASE#NUMBER BASH为进制,NUMBER数字,BASH的范围是2到64,NUMBER必须在BASE范围之内
let "bin=2#1111 0011 0011 01"
echo "$bin"