2013-02-22 96 views
24

我的服務器上有一個備份腳本,它執行備份的cron作業,並向我發送已備份文件的摘要(包括新備份文件的大小)。作爲腳本的一部分,我想通過(1024^3)將文件的最終大小除以文件大小(以字節爲單位)以GB爲單位獲取文件大小。Bash整數除法中的浮點數結果

因爲bash沒有浮點計算,所以我試圖用管道來獲得結果,但是我很難理解基本的例子。

我試圖Pi值到達一個規模,但是,

即使以下工作:

~ #bc -l 
bc 1.06.95 
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 
4/3 
1.33333333333333333333 
22/7 
3.14285714285714285714 
q 
0 
quit 

非交互式版本不起作用:

#echo $((22/7)) | bc 
3 

此作品:

#echo '22/7' | bc -l 
3.14285714285714285714 

但我需要使用變量。所以它不幫助,下面不工作:

#a=22 ; b=7 
#echo $((a/b)) | bc -l 
3 

我明顯缺少在語法東西猛砸中使用變量,可以用什麼我誤解了一些「指針」使用。

正如DigitalRoss說,我可以使用以下命令:

#echo $a/$b | bc -l 
3.14285714285714285714 

但是我不能使用複雜的表達式,如:

#echo $a/(($b-34)) | bc -l 
-bash: syntax error near unexpected token `(' 
#echo $a/((b-34)) | bc -l 
-bash: syntax error near unexpected token `(' 
#echo $a/((b-34)) | bc -l 
-bash: syntax error near unexpected token `(' 

有人可以給我一個工作的正確語法掌握浮點結果複雜的算術表達式?

+0

可以教bash例如整數除法與浮點結果:請參閱:http://stackoverflow.com/a/24431665/3776858 – Cyrus 2014-07-26 12:21:38

回答

31

只是雙引號(")表達:

echo "$a/($b - 34)" | bc -l 

然後bash將擴大$變量,忽略一切,bc會看到帶括號的表達式:

$ a=22 
$ b=7 
$ echo "$a/($b - 34)" 
22/(7 - 34) 

$ echo "$a/($b - 34)" | bc -l 
-.81481481481481481481 
+0

太棒了。我從來沒有想過用雙引號來擴展變量。謝謝! – Droidzone 2013-02-22 02:54:05

+0

Mhhh?雙引號不會擴展變量,但允許這樣做。 – 2013-02-22 03:29:48

+0

甜蜜,如果我偶然發現了這個,我會切換到python。 – Gurubaran 2016-09-23 18:41:22

7

請注意你的echo $((22/7)) | bc -l實際上讓bash計算22/7,然後將結果發送給bc。整數輸出因此不是bc的結果,而只是給bc的輸入。

嘗試echo $((22/7))沒有管道到bc,你會看到。