整型运算
shell 中算术运算只支持整数型。小数部分会舍弃。
算术运算符
支持运算符:
+
、+=
-
、-=
*
、*=
/
、/=
%
、%=
,取余,比如:10%3=1
**
,幂运算,比如:2**3=8
++
--
位运算符
<<
、<<=
:左移>>
、>>=
:右移&
、&=
:与运算|
、|=
:或运算^
、^=
:异或~
、~=
:非
let
数字运算使用 let
命令运算:
v1=1+1
# 结果:1+1
let "v2=1+1"
# 结果:2
let "v3=8|4"
let "i = 1 + 1"
$(( ))
echo $((1+1))
# 结果:2
echo $((2**3))
# 结果:8
let
语句和 $(( ))
语法的另一处重要区别在于两者处理空白字符(空格字符)的方式不同。
对 let 语句来说,要么添加引号,要么赋值运算符(=)和其他运算符两边不能出现空格。必须将运算符和操作数放在一起形成一个单词。以下两种写法都没问题。
let i=1+1
let "i = 1 + 1"
$(( )) 语法就宽松多了,它允许各种空白字符出现在双括号内。这种写法不易出错,代码的可读性也要好得多,是我们执行 bash 整数运算时的首选方式。
$[ ]
echo $[1+1]
# 结果:2
echo $[2**3]
# 结果:8
expr
expr
要求数字和运算符之间有空格
expr 1 + 1
# 打印结果:2
declare -i
声明int类型的变量
declare -i i
i=$i+1
# i=2
浮点型运行
上面的运算只支持整型,浮点运行可以使用bc
命令。
交互式:
$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1.1 * 3
3.3
1*5
5
a=2
b=3
a/b
0
# 设置小数位数
scale=5
a/b
.66666
# 逻辑运算
1>2
0
2==2
1
1>2&&2==2
0
1>2||2==2
1
命令式:
echo "1+1"|bc
# 结果:2
逻辑运算
&&
:与||
:或!
:非
比如:[ -e x.sh ] && [ -e z.zip ]
,判断 两个文件都存在。
逻辑测试运算
-a
:与-o
:或!
:非
比如:[ -e x.sh -a -e z.zip ]
,判断 两个文件都存在。