【Linux】Shell中最常用的算术运算(汇总)

Shell中常用的算术运算

欢迎光临! 本篇文章主要讲述我们编写shell脚本时,最最常用的算术运算方法。仔细阅读这篇文章,你就可以掌握Linux shell脚本中基本数学运算。感兴趣的可以加关注哦!

Bash shell 的算术运算通常有六种方式:

  1. 使用 expr 外部程式
  2. 使用 $(( ))
  3. 使用 $[ ]
  4. 使用let 命令
  5. 使用bc命令(支持浮点数)
  6. 使用awk命令(支持浮点数)

1. 加法

x=4
y=5
# 方法1
r=`expr $x + $y + 1` # 注:变量需要加$,运算符之间需要有空格

# 方法2
r=$((x+y+1))  # 或者
r=$(($x+$y+1)) # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法3(类似方法2)
r=$[x+y+1]  # 或者
r=$[$x+$y+1] # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法4
let r=x+y+1  # 或者
let "r=$x+$y+1" # 或者
let r=$x+$y+1  # 注:变量前$可加可不加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法5
echo $x + $y + 1 | bc   # 或者
echo "$x + $y + 1" | bc   # 注:变量前$必须加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法6
r=`echo $x $y | awk '{print $1+$2}'`

2. 减法

x=10
y=5
# 方法1
r=`expr $x - $y - 1` # 注:变量需要加$,运算符之间需要有空格

# 方法2
r=$((x-y-1))  # 或者
r=$(($x-$y-1)) # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法3(类似方法2)
r=$[x-y-1]  # 或者
r=$[$x-$y-1] # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法4
let r=x-y-1  # 或者
let "r=$x-$y-1" # 或者
let r=$x-$y-1  # 注:变量前$可加可不加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法5
r=`echo $x - $y - 1 | bc`   # 或者
r=`echo "$x - $y - 1" | bc`   # 注:变量前$必须加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法6
r=`echo $x $y | awk '{print $1-$2}'`

3. 乘法

x=10
y=5
# 方法1
r=`expr $x \* $y - 1` # 注:变量需要加$,运算符之间需要有空格,*()需要用\转义

# 方法2
r=$((x*y-1))  # 或者
r=$(($x*$y-1)) # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法3(类似方法2)
r=$[x*y-1]  # 或者
r=$[$x*$y-1] # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法4
let r=x*y-1  # 或者
let "r=$x*$y-1" # 或者
let r=$x*$y-1  # 注:变量前$可加可不加,运算符之间空格可有可无,双引号可有可无(除非有括号)

# 方法5
r=`echo $x * $y - 1 | bc`   # 或者
r=`echo "$x * $y - 1" | bc`   # 注:变量前$必须加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法6
r=`echo $x $y | awk '{print $1*$2}'`

4. 除法

x=10
y=5
# 方法1
r=`expr $x / $y - 1` # 注:变量需要加$,运算符之间需要有空格

# 方法2
r=$((x/y-1))  # 或者
r=$(($x/$y-1)) # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法3(类似方法2)
r=$[x/y-1]  # 或者
r=$[$x/$y-1] # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法4
let r=x/y-1  # 或者
let "r=$x/$y-1" # 或者
let r=$x/$y-1  # 注:变量前$可加可不加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法5
r=`echo $x / $y - 1 | bc`   # 或者
r=`echo "$x / $y - 1" | bc`   # 注:变量前$必须加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法6
r=`echo $x $y | awk '{print $1/$2}'`  # 支持浮点数,除法结果可能是浮点数

5. 取余

x=10
y=7
# 方法1
r=`expr $x % $y - 1` # 注:变量需要加$,运算符之间需要有空格

# 方法2
r=$((x%y-1))  # 或者
r=$(($x%$y-1)) # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法3(类似方法2)
r=$[x%y-1]  # 或者
r=$[$x%$y-1] # 注:变量前$可加可不加,运算符之间空格可有可无

# 方法4
let r=x%y-1  # 或者
let "r=$x%$y-1" # 或者
let r=$x%$y-1  # 注:变量前$可加可不加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法5
r=`echo $x % $y - 1 | bc`   # 或者
r=`echo "$x % $y - 1" | bc`   # 注:变量前$必须加,运算符之间空格可有可无,引号可有可无(除非有括号)

# 方法6
r=`echo $x $y | awk '{print $1%$2}'  `

5. 混合运算

x=4
y=5
# 方法1
r=`expr $x + \($y \* 2 / 3 % 4 \) + 1` # 注:变量需要加$,运算符之间需要有空格,*()需要用\转义

# 方法2
r=$(($x + ($y*2/3%4) + 1))

# 方法3
r=$[$x + ($y*2/3%4) + 1]

# 方法4
let "r=$x + ($y*2/3%4) + 1"  # 注:有括号的运算,一定要加引号

# 方法5
r=`echo "$x + ($y*2/3%4) + 1" | bc`   

# 方法6
r=`echo $x $y | awk '{print $1 + ($2*2/3%4) + 1}'`  # 除法会产生浮点数

虽然Bash shell 有六种算术运算方法,但并不是每一种都是跨平台的,建议按需使用。

6. 浮点数运算

举几个例子吧:

# 小数点后留5位
echo "scale=5;$x/$y" | bc
echo $x $y | awk '{printf "%.5f\n", $1/$2}'

awk也可常于进制转换。例如十进制转十六进制:

echo $x | awk '{printf "%x\n", $1}'
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello_nofail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值