コマンドライン上で計算する方法まとめ【UNIX】【Windows】

コマンドライン上で計算する方法まとめ【UNIX】【Windows】

ニチアサの時間帯移動で特にこれといって影響を受けない視聴者の kagata です。日曜日に早起きをする動機がなくなって、多少不健康にはなるかもしれません。

今回は、コマンドラインからちょっとした計算をする方法を環境ごとにまとめてご紹介します。サーバマシンにログインして設定ファイルを書きながら「えーと session.gc_maxlifetime の1440秒って何分だっけ?」と思ったときとかに便利です。

なお、いずれの環境でも Perl なり Python なりを導入していわゆる better-shell 的に使えばどうにでもなるわけですが、今回はデフォルトの環境ですぐに使える方法をまとめました。

UNIX 環境

Bash の場合

Bash の場合は…というか多くの UNIX 環境では、 expr コマンドを使って四則演算および剰余の計算ができます。

$ expr 1440 / 60
24

ただし、 expr が扱えるのは正負の整数のみです。計算結果の小数点以下は切り捨てられ、引数に小数値が入るとエラーを返します。

$ expr 10 / 3
3
$ expr 10 % 3
1
$ expr 2 * 3.14
expr: non-integer argument

fish の場合

最近はやりの fish には、 math というコマンドが用意されています。

> math 1440 / 60
24
> math 10 / 3
3

math を使うと、 expr よりも高度な計算ができます。

オプション -sN をつけると、計算結果を小数点以下指定した桁数まで表示してくれます。

> math -s3 10 / 3
3.333

引数でも小数が扱えます。

> math '2 * 3.14'
6.28

平方根も計算できます。

> math -s8 'sqrt(2)'
1.41421356

なお、オプション -sN は fish のバージョン2.4で追加されました。CentOS7 で EPEL パッケージから fish をインストールすると、このオプションをサポートしないバージョン2.3が入ってきます。下記ページにある手順で最新版をインストールするのがよいでしょう。

software.opensuse.org: パッケージのインストール: shells:fish:release:2 / fish

ちなみに、 math コマンドの内実は bc というコマンドのラッパーです。fish をインストールすると依存関係により bc コマンドも入ってくるので、これを直接使ってもっと高度な計算もできます。

下の例では、 π = 4arctan(1) より円周率を小数点以下10桁まで求めています。

> echo 'scale=10; 4 * a(1)' | bc -l
3.1415926532

その他、くわしくは下記を参照してください。

Windows 環境

Powershell の場合

なんと、Powershell では式を直に打ち込むだけで計算してくれます。

PS > 1440 / 60
24

小数も扱えます。

PS > 10 / 3
3.33333333333333
PS > 2 * 3.14
6.28

.NET の Math クラスを呼び出すことで、各種数学関数も使えます。記法が多少めんどくさいですが、機能面では fish の math コマンド以上の充実ぶりです。

PS > [Math]::Sqrt(2)
1.4142135623731
PS > 4 * [Math]::Atan(1)
3.14159265358979

その他、 Math クラスの機能については以下がくわしいです。

コマンドプロンプトの場合

古式ゆかしいコマンドプロンプトでは、 set コマンドを使って四則演算らしきことができます。

>set /a num = 1440 / 60
24

ただ、本来 set コマンドは環境変数をセットするためのコマンドです。つまり、上のコマンドを実行すると、計算結果を保持した環境変数が作られてしまいます。

>echo %num%
24

環境変数をセットせずに、計算結果だけを表示する方法は見つけられませんでした。

また、扱えるのは正負の整数のみです。小数は扱えません。

>set /a num = 10 / 3
3
>set /a num = 2 * 3.14
演算子がありません。

まとめ

UNIX や Windows で、コマンドライン上でシュッと計算する方法をまとめました。fish も Powershell も、先代より着実に進歩しているのが素敵ですね。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ