コマンドラインで少数の計算や比較をする方法

シェル

整数の計算なら、「echo $((数式))」でできますよね。

$ echo $((1 + 1))	# 足し算
2
$ echo $((2 - 1))	# 引き算
1
$ echo $((10 * 10))	# かけ算
100
$ echo $((6 / 2))	# 割り算
3
$ echo $((7 % 3))	# 剰余
1
$ echo $((10 ** 10))	# 階乗
10000000000

でも、少数は消えてしまいます。

$ echo $((10/4))
2

少数以下が欲しい場合、「bc」コマンドを使います。

$ echo 'scale=1; 10/4' | bc
2.5

「scale=1」で、少数以下の桁数を1桁に指定しています。もちろん、桁数を増やして実行することもできます。

$ echo 'scale=5; 10000/17 ' | bc
588.23529

数値にシェル変数を使うこともできます。

$ WIDTH=1200
$ NUM=8
$ echo "scale=5; ($WIDTH - 100) / ($NUM / 1.5)" | bc
206.25012

Bashスクリプトなどで「少数を含む数値の比較」する場合もbcが使えます。

#!/bin/bash

NUM1=17.9
NUM2=17.2

if [ `echo "$NUM1 > $NUM2" | bc` == 1 ]; then
  echo "${NUM2}より${NUM1}のほうが大きい"
elif [ `echo "$NUM1 == $NUM2" | bc` == 1 ]; then
  echo "${NUM2}と${NUM1}は同じ"
else
  echo "${NUM2}より${NUM1}のほうが小さい"
fi

更新履歴

2017-10-04 Ubuntu 17.10で動作を確認

シェル
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました