シェルの中で実数計算?
例えば、こんなサンプルが結構ある。
$ cat test.sh
#!/bin/sh
var1=10
var2=20
var3=`expr $var1 + $var2`
echo $var1 $var2 $var3
これ、実行すると
$ sh test.sh
10 20 30
なるほど確かに動くわ。シェルで足し算ってこうやるのねぇ♪
と、思って、特に疑問ももたず、んじゃあ、ちょっと変更して
$ cat test_real.sh
#!/bin/sh
var1=10.5
var2=20.2
var3=`expr $var1 + $var2`
echo $var1 $var2 $var3
とやると、
$ sh test_real.sh
expr: non-numeric argument
10.5 20.2
ありゃ?なんやエラーがでるやん!
というわけで、いろいろと調べてみると、
なるほど、exprってのは、整数じゃないとだめなのね。
じゃあ、実数の計算はどうするのかな....ほう、bcを使えと
とりあえず、コマンドラインで
$ bc
コマンドさーん、どこですかー. (あぅ、使ってるディストリビューションがばれる(--;)
インストールされてないじゃん!!困った
さて、なにを使えばいいかなぁ....
$ cat test_real_perl.sh
#!/bin/sh
var1=10.5
var2=20.2
var3=`perl -e 'print $ARGV[0] + $ARGV[1]' $var1 $var2`
echo $var1 $var2 $var3
とりあえず、Perlで試し。
$ sh test_real_perl.sh
10.5 20.2 30.7
ありゃ、動いたわ。(あたりまえ?)
というわけで、シェルの中の実数計算はperlでやりましょう。ということで。ひとまず終了
2007.10.17追記
awkを使う場合は、
var3=`echo | gawk '{print '$var1'+'$var2'}'`
てな感じ。echo なしでやる方法もあるのかもしれないが...