コマンドライン上で計算する方法まとめ【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 も、先代より着実に進歩しているのが素敵ですね。