Bashで小数の比較を行う
大小比較のコマンド
Bashで小数の大小比較を行うにはbcを使う。
“test”コマンドでは小数の大小比較はできない。
数値計算コマンドの”bc”に不等号での大小比較表現を与えると、その結果が1または0で標準入力に返ってくる。
trueのときが1で、falseのときが0。
1 2 3 | $ bc 3.14 > 1 1 |
イコール付きの表現でもOK。
1 2 3 | $ bc 3.14 >= 3.14 1 |
“bc”は対話的に入力を処理する為、シェルスクリプトから使用する場合には表現を標準入力から与える。
1 2 | $ echo "10 > 3.14" | bc 1 |
標準入力から表現を与える代わりに”-e”オプションで与えることも可能。
1 2 | $ bc -e "10 < 3.14" 0 |
上記の場合、引数で与えた表現を処理したあとに標準入力からの入力を待つ為、”-e quit”を指定することで1回処理を実行したあとにプロセスが終了させることができる。
1 2 | $ bc -e "10 < 3.14" -e quit 0 |
“if”文と”test”コマンドを組み合わせて使用する場合は、以下の通り。
1 2 3 | if [ "$(echo "10 > 3.14" | bc)" -eq 1 ]; then echo "9800 is greater than 33.4" fi |
1 2 3 | if [ "$(bc -e "10 > 3.14" -e quit)" -eq 1 ]; then echo "9800 is greater than 33.4" fi |
サンプル
以下、サンプル。
1 2 3 4 5 6 7 8 | #!/bin/sh # $1 > $2 が真なら1、偽なら0 X=`echo "$1 > $2" | bc` if [ $X -eq 1 ]; then echo "$1 is large" else echo "$2 is large" fi |