linux shell进行数学运算

在bash shell中,可以使用let ,[ ], (()), 执行技术的算术运算,而在进行高级操作时候 expr,bc这两个工具非常有用。

可以使用普通的变量赋值方法定义数值,在上一文章中,我们知道他会被存为字符串,然后我们可以使用上述的方法使它像数学一样进行运算

1 let 

直接看例子

#! /bin/bash
# use let opr
n1=5
n2=6
r1=n1+n2
let r2=$n1+$n2
let R2=n1+n2  # cannot use let $R2=
let n1++ # cannot use  let $n1++
echo $r1
echo "let opr can use or not use  $ before opr var but cannot use $ before the result " $r2  $R2
echo $n1

输出结果:

n1+n2
let opr can use or not use  $ before opr var but cannot use $ before the result  11 11
6

从上知道,如果我们直接使用 r1=n1+n2 那么他将直接输出n1+n2 ,如果是r1=$n1+$n2 那么将输出5+6 与我们前边说的一致,被当做字符串的拼接。

let 的使用是 参与运算的操作数可以使用$也可以不用,他的输出结果r2 ,R2都是11,但是存放结果的变量不能加$

2 [ ]操作

#use [] opr
r3=$[n1+n2]
r4=$[$n1+$n2]
r5=[n1+n2]
echo "[ ] opr  can use or not use $ before opr var ,but result var should use $" $r3  $r4 $r5
输出结果:

[ ] opr  can use or not use $ before opr var ,<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">but result var should use $      </span>12 12 [n1+n2]

从上面输出来看 如果直接 r5=[n1+n2] 他同样是看做字符串,所以[ ]参与运算的操作数可以使用$也可以不适用,但是存放结果的变量必须使用$

3  ((  ))

# use (())
r6=$((n1+n2))  # ((n1+n2)) not right
r8=$(($n1+$n2))
echo "(( )) opr can use or not use $ beforfe opr var ,but should use $ before the result  " $r6 $r8


结果:

(( )) opr can use or not use $ beforfe opr var ,but should use $ before the result   12 12

所以 使用 (( )) 同样参与运算的操作数可以用也可以不用$.但是存放结果的变量必须使用$

4 expr

# use expr function
r1='expr 3+4'
r2="expr 3+4"
r3="expr 3 + 4"
R3=expr 3 + 4
r4='expr $n1 + $n2'
r5="expr $n1 + n2"
r6=$(expr 3 + 4)
r7=$(expr $n1 + $n2)
r8=$(expr $n1+$n2)
echo $r1
echo $r2
echo $r3
echo $R3
echo $r4
echo $r5
echo $r6
echo $r7
echo $r8
echo "suggest the expr use $(expr $n1 + $n2)"
echo -e "suggest the expr use \$(expr \$n1 + \$n2)"

输出结果:

./opr.sh: line 25: 3: command not found
expr 3+4
expr 3+4
expr 3 + 4

expr $n1 + $n2
expr 6 + n2
7
12
6+6
suggest the expr use 12
suggest the expr use $(expr $n1 + $n2)

从这个实践中,我们推荐 expr就固定的使用 $(expr $n1 + $n2)这种是最好的。同时要注意 $n1 + $n2直接要有空格

另外,从这个上面的实践还关系到两个知识点

1) 转义符  如果需要使用转义序列,那么用 echo -e “ 包含转义序列的字符串“ 这种形式  又如  echo -e "1\t2\t3"  输出 1 2 3

2) 使用单引号,双引号输出的不同  。变量替换在单引号中无效,所以 ‘expr $n1 + $n2’ 还是输出expr $n1 + $n2,但在双引号中则输出 expr 6 + 6

5 bc

上述方法只能用于整数运算,不支持浮点数及指数,要实现浮点数,必须使用bc 这个具体用法可以参考man 然后自己再弄几个简单的例子实践一下




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值