本文介绍: 仔细阅读篇文章,你就可以掌握Linux shell脚本基本数学运算。虽然Bash 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 "%.5fn", $1/$2}'

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

echo $x | awk '{printf "%xn", $1}'

原文地址:https://blog.csdn.net/hello_nofail/article/details/129966335

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34664.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注