シェルスクリプトで四則演算する方法
目次
スポンサードリンク
シェルスクリプトで四則演算する方法を解説します。整数の計算で使う構文と少数の計算にも対応できるbcコマンドについて解説します。
$(( )) 構文を使う方法
$(( )) 構文 はシェル内で使用できる構文で、括弧内に計算式を記述することができます。
掛け算・割り算・足し算・引き算の演算子が使用でき、計算式内で変数を使用することもできます。
この構文は計算結果が整数になってしまうので少数を含む計算には使えないのは注意が必要です。
以下は四則演算のサンプルコードです。
#!/bin/bash
# 足し算の結果を出力
result1=$((1 + 2))
echo "$result1"
# 引き算の結果を出力
result2=$((1 - 2))
echo "$result2"
# 掛け算の結果を出力
result3=$((2 * 2))
echo "$result3"
# 割り算の結果を出力
result4=$((10 / 2))
echo "$result4"
exit 0
サンプルコードを calc.sh という名前で保存し実行すると計算結果が表示されました。
[root@hostname tmp]# ./calc.sh
3
-1
4
5
bcコマンドを使用する方法
bcコマンドは、シェル内で任意精度浮動小数を用いた計算を行うためのコマンドです。整数だけでなく、小数点を含む計算にも使用できます。 ただし、小数点の有効桁数を指定しない場合、割り算の場合は小数点以下が切り捨てられるので、注意が必要です。
標準入力から計算式を入力することができます。-i オプションを使用するとファイルから計算式を入力することもできます。
以下のサンプルコードを calc2.sh として保存します。
#!/bin/bash
# 足し算の結果を出力
result1=$(echo " 1.23 + 2.34" | bc)
echo "$result1"
# 引き算の結果を出力
result2=$(echo " 1.23 - 2.34" | bc)
echo "$result2"
# 掛け算の結果を出力
result3=$(echo " 1.23 * 2.34" | bc)
echo "$result3"
# 割り算の結果を出力
result4=$(echo "10 / 4" | bc)
echo "$result4"
exit 0
以下は実行結果です。足し算、引き算、掛け算は正しく計算できていますが、割り算は小数点以下が切り捨てられています。本来の計算結果である 2.5 になるはずが 2 になってるので四捨五入でないこともわかります。
[root@133-130-122-109 tmp]# ./count2.sh
3.57
-1.11
2.87
2
少数点を含む割り算をする際は、以下のように 小数点の有効桁数を指定します。 scale= 2 の部分で有効桁数を指定しています。以下サンプルコードをcalc3.shとして保存し実行してみます。
#!/bin/bash
# 割り算の結果を出力
result4=$(echo "scale=2; 10 / 3" | bc)
echo "$result4"
exit 0
実行してみると期待した結果を得ることができました。
[root@133-130-122-109 tmp]# ./count3.sh
3.33
シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。
Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】
Search
Recent Posts
- カーネル更新やパッケージのパッチ適用後、OSの再起動が必要か確認するLinuxコマンド(needs-restarting)
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法