導入
シェルの変数は、すべて文字列です。だから count=1 に 1 を足そうとして count=count+1 と書いても、count+1 という文字列になるだけ。計算するには計算だと宣言する必要があります。それが $(( )) です。
説明
$((式)) の中では、変数が数値として扱われ、四則演算ができます。
#!/bin/bash
a=10
b=3
echo "足し算: $((a + b))"
echo "引き算: $((a - b))"
echo "掛け算: $((a * b))"
echo "割り算: $((a / b))"
echo "余り: $((a % b))"
# カウントアップの定番
count=0
count=$((count + 1))
count=$((count + 1))
echo "カウント: $count"
ポイントが2つあります。
$(( ))の中では$を省ける($((a + b))でよい。$(($a + $b))でも動く)- 整数しか扱えない。
10 / 3は3になり、小数は切り捨てられます
小数の計算が必要なら bc などの外部コマンドを使いますが、スクリプトで数を扱う場面のほとんどは「件数」「回数」なので整数で足ります。
比較もできます。$((a > b)) は、真なら 1、偽なら 0 を返します。ただし条件分岐で使うのは第4章の [ ] のほうが読みやすいので、ここでは「計算する道具」と覚えておけば十分です。
expr 1 + 2という古い書き方もありますが、記号のエスケープが必要で読みにくいので、いまは$(( ))が標準です。
やってみよう
スクリプトを実行して、5つの演算とカウントアップを確認してください。次に a=10・b=3 の値を変えて、割り算 が切り捨てになること(例: 7 / 2 は 3)を自分の目で確かめましょう。
演習
price=1200 と count=3 を用意し、合計金額を 合計: 3600 の形で表示してください。
ヒント1を見る
掛け算は $((price * count)) です。
ヒント2を見る
echo "合計: $((price * count))"