LinuxやUNIXのシェルでよく利用されるbashで、四則演算や割り算のあまりを求めるといったやり方について。
bashでは、「$(( 計算文 ))」のように記述することで、簡単な計算を行うことができる。
四則演算
$(( 値1 + 値2 )) # 足し算 $(( 値1 - 値2 )) # 引き算 $(( 値1 * 値2 )) # 掛け算 $(( 値1 / 値2 )) # 割り算
[root@BS-PUB-CENT7-01 ~]# #足し算 [root@BS-PUB-CENT7-01 ~]# echo $(( 20 + 2 )) 22 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 引き算 [root@BS-PUB-CENT7-01 ~]# echo $(( 20 - 2 )) 18 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 掛け算 [root@BS-PUB-CENT7-01 ~]# echo $(( 20 * 2 )) 40 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 割り算 [root@BS-PUB-CENT7-01 ~]# echo $(( 20 / 2 )) 10
割り算のあまり(剰余)を求める
剰余を求める場合は、「$(( 値1 % 値2))」と記述することで、値1を値2で割ったときの余りを求めることができる。
$(( 値1 % 値2 ))
[root@BS-PUB-CENT7-01 ~]# # 剰余を求める [root@BS-PUB-CENT7-01 ~]# echo $(( 20 % 3 )) 2 [root@BS-PUB-CENT7-01 ~]# echo $(( 21 % 4 )) 1
階乗を求める
階乗を求める場合は、以下のように「$(( 値1 ** 値2 ))」と記述することで求めることができる。
$(( 値1 ** 値2 ))
[root@BS-PUB-CENT7-01 ~]# echo $(( 3 ** 2 )) 9 [root@BS-PUB-CENT7-01 ~]# echo $(( 3 ** 4 )) 81
偶数か奇数かを判定する
対象の数字が偶数か奇数かを判定場合は、以下のように「$(( 値1 & 1 ))」と記述することで、奇数は1、偶数は0として返ってくる。
$(( 値1 & 1 ))
[root@BS-PUB-CENT7-01 ~]# echo $(( 3 & 1 )) 1 [root@BS-PUB-CENT7-01 ~]# echo $(( 195 & 1 )) 1 [root@BS-PUB-CENT7-01 ~]# echo $(( 192 & 1 )) 0
その他、コマンドでこういった計算をする場合は、以下のコマンドが使える。
exprコマンド
簡単な計算であれば、exprコマンドを使うことで行うことができる。
基本的な書き方はbashでの計算方法と同じだ。
[root@BS-PUB-CENT7-01 ~]# # 足し算 [root@BS-PUB-CENT7-01 ~]# expr 20 + 2 22 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 引き算 [root@BS-PUB-CENT7-01 ~]# expr 20 - 2 18 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 掛け算 [root@BS-PUB-CENT7-01 ~]# expr 20 \* 2 40 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 割り算 [root@BS-PUB-CENT7-01 ~]# expr 20 / 2 10 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 割り算の余り(剰余) [root@BS-PUB-CENT7-01 ~]# expr 19 % 4 3
bcコマンド
より複雑な計算をさせたい場合なら、書き方は多少面倒にはなるがbcコマンドを利用するとよいだろう。
bcで計算を行うには、bcを引数なしで実行し対話モードで計算式を渡すか、echoで計算式を出力してそれをパイプで渡してやるとよいだろう。
[root@BS-PUB-CENT7-01 ~]# # 足し算 [root@BS-PUB-CENT7-01 ~]# echo "20 + 2" | bc 22 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 引き算 [root@BS-PUB-CENT7-01 ~]# echo "20 - 2" | bc 18 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 掛け算 [root@BS-PUB-CENT7-01 ~]# echo "20 * 2" | bc 40 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 割り算 [root@BS-PUB-CENT7-01 ~]# echo "20 / 2" | bc 10 [root@BS-PUB-CENT7-01 ~]# [root@BS-PUB-CENT7-01 ~]# # 割り算の余り(剰余) [root@BS-PUB-CENT7-01 ~]# echo "19 % 4" | bc 3
上のような簡単な計算のほか、length()やsin()といった関数を用いて数字の桁数や小数点以下の値の桁数、sinやcosといった値についても求めることができる。
