[ SHELL编程 ] shell编程中数值计算方法实例
2017-08-12 08:35
288 查看
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结。主要包括let、bc、expr、(())等。
无法计算浮点数,报错
看到乘数和除数的精度不同了吗?设置其他参数测试下
乘法输出结果的精度和相乘数最长的进度保持一致。整数相除结果下取整。当然,它是可以赋值的
var=$((1+1)) #1+1运算符前后中间是否有空格不影响计算
v1=10
v2=15
var=$((v1+v2))
var=$(($v1+$v2))
a=$(( 1 + 1.0 )) #提示语法错误
可以发现,在$(())中的变量带不带$取值符号都不影响计算。
最后来看个实例,输出1~5的数值
输出结果
1、let
使用格式:let 表达式,表达式必须是完整的表达式,即等号两边。只能赋值,不支持浮点数运算,不支持直接输出$ var=10 $ let var+=2 #var=12,中间不能有空格 $ let var=var+2 #var=14 $ let var*=2 #var=28 $ let var/=2 # var=14
无法计算浮点数,报错
$ var=2.5 $ let var+=1 -bash: let: 2.5: 语法错误: 无效的算术运算符 (错误符号是 ".5")
2、bc
常用,支持浮点数运算echo "1+1" | bc # 2 echo "1.5+1.5" | bc # 3.0 echo "3-1.2" | bc #1.8 echo "1.5*1.5" | bc #2.2 echo "10/3" | bc # 3 echo "scale=2;10/3" | bc #3.33
看到乘数和除数的精度不同了吗?设置其他参数测试下
echo "1.5*1.33333" | bc #1.99999 echo "1.5111111111111111111111*1.33333" | bc #2.0148097777777777777777 echo "4/5" | bc #0 echo "1/2" | bc #0 echo "6/5" | bc # 1
乘法输出结果的精度和相乘数最长的进度保持一致。整数相除结果下取整。当然,它是可以赋值的
var=$(echo "1+1"|bc) #var=2
3、expr
不支持浮点数运算,注意数字与计算符中的空格expr 1 + 1 #2 expr 1 - 1 #0 expr 1 \* 1 #1,注意*号前面有\,否则报错 expr 1 / 1 #1 expr 1+1 #1+1,与预期不符 expr 1.0 + 1 #输出语法错误 var=$(expr 1 + 1) #var=2 var2=$(expr ${var} + 2) #var2=4
4、$(())
不支持浮点数运算,不支持窗口直接执行$(()),var=$((1+1)) #1+1运算符前后中间是否有空格不影响计算
v1=10
v2=15
var=$((v1+v2))
var=$(($v1+$v2))
a=$(( 1 + 1.0 )) #提示语法错误
可以发现,在$(())中的变量带不带$取值符号都不影响计算。
5、awk
awk结合print的使用可以很好的各种完成数值计算,包括浮点数及精度控制。$ awk 'BEGIN{printf 1.0/2.0}' #0.5 $ awk 'BEGIN{printf "5.2f%",10/3}' #3.33 $ var1=10 $ var2=3 $ awk -v v1=${var1} -v v2=${var2} 'BEGIN{printf "%5.2f\n",v1/v2}' #3.33
最后来看个实例,输出1~5的数值
#!/bin/bash i=1 MAX=5 while [ ${i} -lt ${MAX} ];do printf "${i}\n" i=$(($i+1)) done
输出结果
1 2 3 4
相关文章推荐
- Android-调用本地方法计算int数值相加结果显示在界面上/NDK-JNI开发实例(三)
- Shell编程:字符串与数值之间的转换与计算
- JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
- JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
- 数值计算方法:二分法求解方程的根(伪代码 python c/c++)
- C#计算矩阵的逆矩阵方法实例分析
- 计算数学与数值分析(数值计算方法)——学习资料(更新...........)
- PHP高精度数值计算方法
- CRC计算方法与实例
- 计算出的多小数位的数值控制小数位的方法
- 数值计算方法程序库
- 计算电磁学基础知识及数值方法汇总
- Linux20-shell编程基础、数值计算、字符串处理
- N年前采用过的计算数值导数而且不会导致序列偏移的基于样条曲线的巧妙方法
- JS计算浮点数加减乘除精确数值的方法
- shell编程——变量的数值计算
- 子网掩码划分计算方法及实例
- 数值计算方法程序库
- vue计算属性的使用和vue实例的方法
- vue中的计算属性的使用和vue实例的方法示例