在脚本和浮点部门
我想在我的脚本中执行以下操作:
1 - ((m - 20) / 34)
我想把这个操作的结果分配给另一个variables。 我想我的脚本使用浮点math。 例如,对于m = 34:
results = 1 - ((34 - 20) / 34) == 0.588
你可以使用bc
计算器。 如果你设置从默认值0开始的默认值,它将使用小数(不是二进制浮点数)进行任意的精确math运算:
$ m=34 $ bc <<< "scale = 10; 1 - (($m - 20) / 34)" .5882352942
-l
选项将加载标准的math库,默认缩放比例为20:
$ bc -l <<< "1 - (($m - 20) / 34)" .58823529411764705883
然后,您可以使用printf格式化输出,如果您select:
printf "%.3f\n" "$(bc -l ...)"
Bash不会做浮点math。 你可以用awk或者bc来处理这个。 这里是一个awk的例子:
$ m=34; awk -vm=$m 'BEGIN { print 1 - ((m - 20) / 34) }' 0.588235
将输出分配给一个variables:
var=$(awk -vm=$m 'BEGIN { print 1 - ((m - 20) / 34) }')
教bash例如整数除法与浮点结果:
#!/bin/bash div () # Arguments: dividend and divisor { if [ $2 -eq 0 ]; then echo division by 0; exit; fi local p=12 # precision local c=${c:-0} # precision counter local d=. # decimal separator local r=$(($1/$2)); echo -n $r # result of division local m=$(($r*$2)) [ $c -eq 0 ] && [ $m -ne $1 ] && echo -n $d [ $1 -eq $m ] || [ $c -eq $p ] && return local e=$(($1-$m)) let c=c+1 div $(($e*10)) $2 } result=$(div 1080 633) # write to variable echo $result result=$(div 7 34) echo $result result=$(div 8 32) echo $result result=$(div 246891510 2) echo $result result=$(div 5000000 177) echo $result
输出:
1.706161137440 0.205882352941 0.25 123445755 28248.587570621468
echo $a/$b|bc -l
给出结果。
例:
read ab echo $a/$b|bc -l
input一个&b值为10 3,得到3.3333333333
如果你想存储在另一个variables的值,然后使用代码
read ab c=`echo $a/$b|bc -l` echo $c
它也给出了与上面相同的结果。 尝试一下…
使用此脚本与喜欢的编辑器打开此文件,如:
$ sudo vim /usr/bin/div
然后粘贴这个代码:
#!/bin/bash # Author: Danial Rikhteh Garan (danial.rikhtehgaran@gmail.com) if [[ -z "$1" ]] || [[ -z "$2" ]]; then echo "Please input two number" echo "for 100/50 use: div 10 50" exit 1; fi div=$(echo "$1/$2" | bc -l); echo 0$div | sed 's/[0]*$//g'
现在chmod到755:
$ sudo chmod 755 /usr/bin/div
现在使用它:
$ div 5 100 0.05
在你的脚本中你可以使用这个:
var=$(div 5 100); echo "$var"