基本の四則演算
exprを使用すると簡単に四則計算ができます。
足し算
$ expr 10 + 2
12
引き算
$ expr 10 - 2
8
掛け算 (*はエスケープの必要あり)
$ expr 10 \* 2
20
割り算の 剰余
$ expr 10 % 2
0
割り算 商
$ expr 10 + 2
5
bashでは算術式 $(( ))も利用できます。
$ $((10 / 2))
シェルスクリプトで変数に代入するときは``などはいらない。変数の${変数}もいらない
_ANS=$((_num1 / _num2))
算術式は高速ですがexprを使った方が互換性の面で良いかもしれない。
bcコマンドはより複雑な計算が可能なコマンドです。bcコマンドはインストールが必要な場合があるのが欠点です。
$ echo "10*20" | bc
200
bcコマンドに渡して単純な計算を行う。
$ echo "num=10; num + 10.2 * 2" |bc
変数にいれて計算、小数点の計算も可能
割り算はデフォルトでは整数の商だけ
$ echo "num=10; num + 10.554 * 2 / 20" |bc
11
scale=数値 で答えの桁数を設定できます。
$ echo "scale=5;num=10; num + 10.554 * 2 / 20" |bc
11.05540
expr: non-integer argumentのエラー
変数をexprを使って計算しようとするとnon-integer argumentのエラーが表示される場合があります。
(shellscript内にある変数をexprで計算している)
$ expr ${_num1} / 100
expr: non-integer argument
これは変数の中に制御文字が入っていることがあります。制御文字はcat -eで表示可能
制御文字はsedで変換できます。
$ cat -e _num1
781^M$
$ cat -e _num1 | sed -e 's/\r/\n/g'
781$
$ expr ${_num1} / 100
7