shell 计算器的实现示例
作者:一只勤劳的耗子
简介
shell 编程中的 $(( )) 、$[ ] 和 expr 仅支持整数运算,不支持小数运算,如果除法的结果为小数,那么按取整处理。小数计算需要依赖命令,这里介绍 bc、awk 两个命令的计算方法。
1. 整数计算
常用符号如下:
+:加法
-:减法
*:乘法
/:除法
^:幂运算
%:取余
shell 通过 $(( )) 或 $[ ] 来计算整数,比如 1+1
echo $(( 1 + 1 )) echo $[ 1 + 1 ]
但如果将0作为除数,那么直接报错
如果计算中出现非变量的字母,那么这个字母会被当做 0 处理
注意:$(( )) 和 $[ ] 不支持小数运算,如果除法运算的结果为小数,那么系统自动取整
echo $(( 10 / 3 ))
括号中支持变量计算
对变量做运算(修改变量)
# 定义一个变量 n=10 # 将变量+1 (( n++ )) # 查看这个变量的结果 echo ${n}
直接对变量做计算可以直接使用 (( )),举几个常用的方法
(( n++ )) # 表示变量n+1 (( n-- )) # 表示变量n-1 (( n+=5 )) # 表示变量n+5 (( n-=5 )) # 表示变量n-5 (( n*=5 )) # 表示变量n*5 (( n1 = n2 + 1 )) # 表示变量n1 = 变量n2 + 1
所有的计算 n=n+1 都可以简化成 n+=1,其他计算方式同理。
除了直接使用 $(( )) 或 $[ ] 来运算,shell 还支持 expr 来运算整数(方法都一样)
expr [数字1] [运算符号] [数字2]
2. 小数计算
由于 $(( )) 和 $[ ] 不支持小数运算,我们需要借助其他命令来实现。这里介绍2个命令 bc 和 awk
2.1. bc 命令计算
bc 是 Linux 中一个用于计算的命令,支持高精度的数学计算,可以进行大多数基本的数学运算,包括加、减、乘、除、取模、指数、三角函数等。
执行 bc 会出现一个交互界面(quit 退出)
在这个交互界面中可以执行数学运算,回车键表示 "="
在脚本中我们一般不会用到交互界面,那么可以使用 bc 结合 echo 来使用。比如计算 1+1
echo "1 + 1" |bc
使用 echo 输出一串字符,再使用管道符传递给 bc 使其计算。就类似于这样
如果不指定小数点位数,除法的结果为小数也会直接取整
echo "10 / 3" |bc
如果需要显示小数位数,那么在 echo 中指定 scale=n(n表示位数)
echo "scale=2; 10 / 3" |bc
2.2. awk 命令计算
awk 命令本身是用于文件操作,由于功能强大,但也支持计算。
比如计算:1 + 1
awk 'BEGIN{print 1 + 1}'
awk 本身是对文件操作,如果不指定文件需要加上 BEGIN 字符来实现计算。
awk 也支持小数(默认保留5为)
awk 'BEGIN{print 10 / 3}'
指定2位小数
awk 'BEGIN{printf "%.2f", 10 / 3}'
使用变量
a=10 b=20 awk -v "a=${a}" -v "b=${b}" 'BEGIN{printf "%.2f", a / b}'
由于 awk 中使用的是单引号,无法转译变量,所以只能通过 -v 定义两个属于 awk 本身的变量,再执行计算。也可以直接使用变量,但需要将 awk 外围的单引号换成双引号,里面的双引号需要转译
a=10 b=20 awk "BEGIN{printf \"%.2f\", ${a} / ${b}}"
也支持文件中的数据计算
【求和】
awk '{sum+=$1} END{print sum}' 文件名
【求平均数】
awk '{sum += $1} END{print sum/NR}' 文件
【求最大值】
awk 'NR==1 {max=$1} $1>max {max=$1} END{print max}' 文件
【求最小值】
awk 'NR==1 {min=$1} $1<min {min=$1} END {print min}' 文件名
【将第1列的所有值 +10 】
awk '{print $1 + 10}' 文件名
【读取文件偶数行】
awk 'NR % 2 == 0' 文件名
到此这篇关于shell 计算器的实现示例的文章就介绍到这了,更多相关shell 计算器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!