2011-08-09 5 views
0

をリダイレクトに私は何回か実行して、端末上に特定の値を印刷プログラム(a.outの)を有するシェルスクリプトシェルスクリプトエラー出力

に小さな疑問を抱えています。私は、このプログラムの出力をキャプチャして出力を追加するシェルスクリプトを書く必要があります。

は、私は私の値である引数を指定してa.outを実行し、ここで次のスクリプト

value=0 
total=0 
for((i=0;i<10;j++)) 
do 
value=`./a.out $i` 
total=`expr $total + $value` 
done 
echo value is $value total is $total 

を書きました。このスクリプトを実行すると、エラーが発生します。expr: non-integer argument

ここでの問題は値変数です。私のa.outは出力として2倍を与え、私はこの数値を変数に取り込む必要があります。

私はシェルスクリプトの初心者ですが、何か助けてください。

ここ
+0

forループでは 'j ++'ではなく 'i ++'を意味すると思います。そして '。/ a.out'は出力としてdoubleを与えていません。それはあなたにテキストの行を与えています(文字列として格納して、それを数字として解釈するかもしれません)。 –

答えて

2

、しかし:例でhttp://www.linuxjournal.com/content/floating-point-math-bash

見て、のようなものになるだろうbcに電話することができます:

add() { printf "%s + %s\n" $1 $2 | bc -l; } 
total=0.0 
for ((i=0; i<10; i++)); do 
    total=$(add $total $(./a.out $i)) 
done 
+0

ありがとう...!これは私の問題を解決した..! – psteelk

0

は、浮動小数点演算を扱うためのbashの機能のカップルは、次のとおりです。あなたは、ほとんどのシェルは、浮動小数点演算を行うことはできません

$tmp_total = $(float_eval "$value + $total") 
$total = $tmp_total 
関連する問題