2013-02-22 19 views
24

私は自分のサーバー上にバックアップのcronジョブを実行するバックアップスクリプトを用意しています。新しいバックアップファイルのサイズを含め、バックアップされたファイルの概要を送ってくれます。スクリプトの一環として、ファイルの最終サイズを(1024^3)で割り、ファイルサイズをGB単位でバイト単位で取得したいと考えています。浮動小数点の結果がBashの整数部になります

bashには浮動小数点の計算がないので、結果を得るためにbcにパイプを使用しようとしていますが、私は基本的な例に困惑しています。

私も、次の作品かかわらず、しかし、スケールにパイの値を取得するために

を試してみました:

~ #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 

しかし、変数を使う必要があります。だから、それは次のように動作しないことを助けるdoesntの:

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

を私は明らかにbashで変数を使用するための構文で何かが欠けている、と私は誤解した内容にいくつかの「ポインタ」で使用することができます。

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

答えて

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

+0

Mhhh?二重引用符は変数を展開するのではなく、それを許可します。 –

+0

甘い、私はこれにつまずいた場合、私はPythonに切り替えていただろう。 – Gurubaran

7

ますのでご注意くださいecho $((22/7)) | bc -lが実際にbashを22/7に計算し、その結果をbcに送信することを示します。したがって、整数出力はbcの結果ではなく、単にbcに与えられた入力です。

echo $((22/7))をbcに配管せずに試してみてください。

関連する問題