shell编程:运算

shell编程  ·  2020-11-13


进制转换
echo $((16#2a)) ==> 42  #(16进位2a转十进制)  
echo $((8#20))  ==> 16  #(8 进制20转十进制)
  • 输出结果只能是十进制

整数运算
三种写法>>备注
  1. expr法|z=expr $a + $b|1. 各元素以空格分割 2.*、/等运算符需要用"\"转移
  2. 双括号法|z=$(( a + b)) |1.将结果赋值 2.空格都可以省略 3.变量a、b可以省略$不写
  3. 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
 
评论
Glab. All Rights Reserved. Theme Jasmine by Kent Liao.