shell编程:运算
进制转换
echo $((16#2a)) ==> 42 #(16进位2a转十进制)
echo $((8#20)) ==> 16 #(8 进制20转十进制)
- 输出结果只能是十进制
整数运算
三种写法 | >> | 备注 |
---|
- expr法|z=
expr $a + $b
|1. 各元素以空格分割 2.*、/等运算符需要用"\"转移 - 双括号法|z=
$(( a + b))
|1.将结果赋值 2.空格都可以省略 3.变量a、b可以省略$不写 - let法|let
"z = a + b"
|1.运算表达式中如果没有空格可以去掉引号
深度剖析
- let、双括号,会从环境变量中读取变量的值, 所以不用写$
- ((a + b))、((a > b)) #另一种用法 结果类型是:Boolean 可以用于if等条件语句中 (如果结果为0,或者表达式不成立,则为false)
(())用法
$(( )) 的整数运算符号大致有这些:
\+ - * / % & | ^ !
(( )) 的测试符号
<:小于
>:大于
<=:小于或等于
>=:大于或等于
==:等于
!=:不等于
例:
$ a=5; b=7; c=2
$ echo $(( a+b*c )) ==> 19
$ echo $(( (a+b)/c )) ==> 6
$ echo $(( (a*b)%c)) ==> 1
$ echo $(( $a + $b * $c)) ==> 19 #也可不用空格分割
a=5; ((a++)); echo $a ==> 6
a=5; ((a--)); echo $a ==> 4
a=5; b=7; z=$((a < b)); echo $z ==> 1 (true 的返回值,false 返回0) # ((a<b)), 如不赋值,可以单独使用(不用$)
# 其他
((z+3)) #bool, 运算结果为0时,则False,其他值为true
(( y += 1 )) # y=104
(( $y+= 1 )) #centos7下不通过 12+=12 12=12+12
let z=z+3 #z=103
let "z += 3" #使用引号可以允许含有空格
浮点数
方法一: bc计算器
$ echo "5.01-4*2.0"|bc -2.99 #加减运算不用scale $ echo 'scale=6;1.0/3'|bc .333333 # 没有0
方法二: awk
$ awk 'BEGIN{print 7.01*5-4.01 }' 31.04