Linux講座にようこそ。このページは「Linuxの使い方 - 第6章 シェルスクリプトの作り方」です。

Linuxの使い方

6. シェルスクリプトの作り方(4/8)

6.6 四則演算

四則演算は「$(( 式 ))」の形式で行うことが出来ます。(「式」の前後には空白が有っても無くても構いません)「式」の部分には次に示す演算子を使って計算式を指定します。演算は整数で行われますので、除算(/)はが求まり、剰余(%)は余りが求まります。また、四則演算以外にビットのシフトや論理演算も可能です。

計算式には変数を使うことも出来ますが、数値演算の場合は変数の値の参照のための$を省略出来ます。

【表6-10】四則演算子一覧
演算子意味
+加算
-減算
*乗算
/除算(商)
%剰余(余り)

$(( 式 ))とよく似た指定に、$(コマンドリスト)がありますが、こちらはコマンド置換の指定です。コマンド置換に付いては「コマンド置換機能の使い方」をご覧下さい。

6.6.1 例題

例題1

四則演算を確認します。(この例題では式の内容が見やすいように半角スペースで区切っていますが、区切らなくてもかまいません)

$ v1=$(( 10 + 20 )) ← 変数v1に結果を求めます。$((10+20))でも同じです
$ echo $v1
30
$ echo $(( 10 - 5 )) ← echoコマンドで演算結果を表示します
5
$ echo $(( 5 * 5 ))
25
$ echo $(( 10 / 3 )) ← 商を求めます
3
$ echo $(( 10 % 3 )) ← 余りを求めます
1
$ echo $(( 10 - 5.5 )) ← 5.5のような実数は使用できません
bash: 10 - 5.5 : syntax error: invalid arithmetic operator (error token is ".5 ")
$
$ echo $(( $v1 + 5 ))
35
$ echo $(( v1 + 5 )) ← 変数v1の参照のための$を省略します
35
$

例題2

引数で指定した値を加算します。(ex40.sh)

#!/bin/bash
# 機能  :  引数で指定された2つの値を加算します
# 作成  :  メリー
 
atai1=${1:?"値がありません。中止します。"}
atai2=${2:?"2つめの値がありません。中止します。"}
 
echo $atai1 + $atai2 = $(($atai1 + $atai2))
$ ex40.sh 10 20
10 + 20 = 30
$ ex40.sh
/home/merry/mybin/ex40.sh: 1: 値がありません。中止します。
$ ex40.sh 10
/home/merry/mybin/ex40.sh: 2: 2つめの値がありません。中止します。
$

例題3

引数で指定されたディレクトリの下のファイルとディレクトリの数を表示します。(ex41.sh)

#!/bin/bash
# 機能  :  引数で指定されたディレクトリの下のディレクトリとファイルの数を表示します
# 作成  :  メリー
 
dir=${1:?"ディレクトリの指定がありません。中止します。"}
 
dir_kazu=$(find "$dir" -type d | wc -l)   # findコマンドでディレクトリを検索し、wcコマンドで出力行数を数える
dir_kazu=$(( $dir_kazu - 1 ))             # 引数で指定されたディレクトリ分を除く
 
file_kazu=$(find "$dir" -type f | wc -l)  # findコマンドでファイルを検索し、wcコマンドで出力行数を数える
 
echo "${dir}の下には${dir_kazu}個のディレクトリと${file_kazu}個のファイルがあります"
$ tree ./DATA ← DATAディレクトリの木構造を表示します
./DATA
├── DIR01
│   ├── SUBDIR
│   ├── Screenshot.png
│   ├── command.txt
│   ├── mousikomi.odt
│   └── mozilla.pdf
└── DIR02
    ├── Screenshot
    ├── command
    ├── mousikomi
    └── mozilla

3 directories, 8 files
$
$ ex41.sh ./DATA
./DATAの下には3個のディレクトリと8個のファイルがあります
$