6553 [2018-08-10 11:09:19] let a=2
6554 [2018-08-10 11:09:22] let b=3
6555 [2018-08-10 11:09:26] let c=a+b
6557 [2018-08-10 11:09:32] echo $c (5)
6558 [2018-08-10 11:09:42] a=2.2
6559 [2018-08-10 11:09:45] b=3.3
6560 [2018-08-10 11:09:48] let c=a+b (报错)
6561 [2018-08-10 11:09:57] a="2.2"
6562 [2018-08-10 11:10:01] b="3"
6563 [2018-08-10 11:10:05] let c=a+b (报错)
6564 [2018-08-10 11:10:25] let b+=4
6565 [2018-08-10 11:10:27] echo $b (7)
6566 [2018-08-10 11:10:46] c=[ a+b ] (报错)
6567 [2018-08-10 11:10:50] c=[ a + b ] (报错)
6568 [2018-08-10 11:10:57] c=$[ a + b ] (报错,a=2.2)
6569 [2018-08-10 11:10:59] a=2
6570 [2018-08-10 11:11:00] c=$[ a + b ] (9)
6571 [2018-08-10 11:11:02] echo $c
6572 [2018-08-10 11:11:11] c=$[ $a + b ] (9)
6573 [2018-08-10 11:11:12] echo $c
6574 [2018-08-10 11:11:21] echo $a
6575 [2018-08-10 11:11:40] c=$(( a + b )) (9)
6576 [2018-08-10 11:11:42] echo $c
6577 [2018-08-10 11:11:47] c=$(( a + $b )) (9)
6578 [2018-08-10 11:11:49] echo $c
6579 [2018-08-10 11:12:02] c=[ $a + $b ] (报错)
6580 [2018-08-10 11:12:15] c=$(( a + $b )) (9)
6581 [2018-08-10 11:12:17] echo $c
总结: let, (())都可以做简单整数计算,涉及到浮点数就报错
使用时,内部的表达式可以使用在变量名前使用$,也可以不使用。
let c=a+b
let b+=4
c=$[ a + b ]
c=$[ $a + b ]
c=$(( a + b ))
c=$(( a + $b ))
补充: c=b + 5) , 此处注意一定要在 + 两边有空格,否则就不是计算了,变成了字符串拼接。c=expr 3 + 4
也是一样,必须在加号两边有空格才是计算。
上面这些都是整数计算的。浮点数的请用bc :
c=`echo 3 + 4.1|bc`
echo "1+2"|bc
echo "1+2.1"|bc
echo "scale=3;3/8"|bc #设置小数位精度到3位
echo "10^6"|bc #幂运算
echo "sqrt(100)"|bc #求平方根
a=100
6608 $ echo "obase=2;$a"|bc #十进制转化到二进制
1100100
6609 $ echo "obase=10;ibase=2;1100100"|bc #二进制转化到十进制
100
obase outbase,ibase inbase 这样就好记了吧 。