シェルスクリプトにおける数学演算

expr を用いた数学演算

expr 演算子の一覧

大小比較: 整数のみ比較可能で、スペースが必要。Linuxの予約語はエスケープが必要です。

a=10
b=20
expr $a \> $b

前のコマンドの実行結果を確認します。

echo $?

0が成功、それ以外は失敗を意味します。

小なり、小なりイコール、大なりイコール

expr $a \< $b
expr $a \<= $b
expr $a \>= $b

演算: 加算、減算、乗算、除算

# 加算
x=8
y=3
expr $x + $y

# 減算
z=`expr $x + $y`
echo $z

expr $x - $y

# 乗算
expr $x \* $y

# 除算
expr $x / $y

# 剰余
expr $x % $y

注意点:

二重括弧 $(()) を使った計算は、変数に代入しないとエラーになります。

# 直接出力するとエラー
$(($x+$y))

# 変数に代入する必要がある
total=$(($x+$y))
echo $total

total=$(($x*$y))
echo $total

total=$(($x-$y))
echo $total

total=$(($x/$y))
echo $total

$(()) では一部の演算子がサポートされていないため、比較演算時は expr を使用することが推奨されます。

val1=7
val2=2
val3=$(($val1=$val2))
expr $val1 = $val2

練習例

ユーザーに正の整数 num を入力させ、1+2+3+...+num の値を計算します。num が正の整数でない場合は、再入力を促します。

正の整数かどうかを判断する方法:

  • expr は整数のみ計算可能なので、expr を使って計算し $? の値を取得することで整数かどうかを判断できます。
  • expr $num1 \\&gt; 0 を使って0より大きいかどうかを判断します。
# 整数でない値を expr で計算するとエラーになる
num1=12.34
expr $num1 + 1

sum.sh

#!/bin/bash
#
while true
do
        read -p "正の整数を入力してください: " input_num
        # 整数かどうかを判断
        expr $input_num + 1 &> /dev/null
        if [ $? -eq 0 ];then
                # この整数が0より大きいかどうかを判断。大きい場合は1を返す
                if [ `expr $input_num \> 0` -eq 1 ];then
                        # $total は初期化されていないため、デフォルトで0
                        for((j=1;j<=$input_num;j++))
                        do
                                total=`expr $total + $j`
                        done
                        echo "1+2+3+...+$input_num = $total"
                        # 計算が終わったらスクリプトを終了
                        exit
                fi
        fi
        echo "エラー: 不正な入力です"
        continue
done

スクリプトの実行

sh sum.sh

bc を用いた数学演算

bc の紹介:

  • bc はbashに組み込まれた計算ツールで、浮動小数点数の演算をサポートします。
  • 組み込み変数 scale で精度を設定でき、デフォルトは 0 です。

bc 演算子の一覧

インタラクティブなテスト

スクリプト内でパイプラインを使って計算する

echo "15.5 * 2" | bc

精度を保持する scale=4; で区切る

echo "scale=3;10.0/3.0" | bc

bc のサンプルスクリプト

calc_bc.sh

#!/bin/bash
#

read -p "数値1: " first_num
read -p "数値2: " second_num

#num3=`echo "scale=4;$first_num/$second_num" | bc`

result=`echo "scale=4;$first_num/$second_num" | bc`

echo "$first_num / $second_num = $result"

実行

sh calc_bc.sh

タグ: Shell bash expr bc 数値計算

5月26日 15:51 投稿