本文へスキップ
BecomeCoder

シェルスクリプトコース · 第2章 変数とクォート · レッスン8

数を数える ― $(( )) で計算する

ブラウザで完結

導入

シェルの変数は、すべて文字列です。だから 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 / 33 になり、小数は切り捨てられます

小数の計算が必要なら bc などの外部コマンドを使いますが、スクリプトで数を扱う場面のほとんどは「件数」「回数」なので整数で足ります。

比較もできます。$((a > b)) は、真なら 1、偽なら 0 を返します。ただし条件分岐で使うのは第4章の [ ] のほうが読みやすいので、ここでは「計算する道具」と覚えておけば十分です。

expr 1 + 2 という古い書き方もありますが、記号のエスケープが必要で読みにくいので、いまは $(( )) が標準です。

やってみよう

スクリプトを実行して、5つの演算とカウントアップを確認してください。次に a=10b=3 の値を変えて、割り算 が切り捨てになること(例: 7 / 23)を自分の目で確かめましょう。

演習

price=1200count=3 を用意し、合計金額を 合計: 3600 の形で表示してください。

ヒント1を見る

掛け算は $((price * count)) です。

ヒント2を見る

echo "合計: $((price * count))"

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。