シェルスクリプトに挑戦しよう(13)制御構文[その5]――forによる繰り返し処理(3)“応用力”をつけるためのLinux再入門(33)

今回も「for文」を解説します。for文では、「算術演算子」を使うことで、回数を指定して繰り返し実行することもできます。

» 2019年01月09日 05時00分 公開
[西村めぐみ@IT]
「“応用力”をつけるためのLinux再入門」のインデックス

“応用力”をつけるためのLinux再入門

forの基礎構文(2)――回数の処理

 for文では、回数を指定した処理は「for ((i=1; i<=10; i++)) do 〜 done」のように書くことができます()。「((」と「))」の間に書かれている箇所は、それぞれ「変数iに1を入れる」「iが10以下の間繰り返す」「iは1ずつ増やす」という意味です。

【※】この書き方は、bashでは使用できますが、bashの前身である「sh」では使用できません。shで同じような繰り返し処理を行いたい場合は、この後取り上げる「while文」を使用します。



 「(( ))」の部分は「算術式」として扱われます。四則演算や増減、大小の比較などが可能です。基本的な書き方で動作を確認してみましょう。

for ((式1; 式2; 式3))		#式1を実行した後、式3が成立するまでの間繰り返す
do
  コマンド
  #(doneの直前に式2を実行してforの先頭に戻る)
done
▲リストを使って繰り返すfor文
#! /bin/bash
for ((i=1; i<=10; i++))
do
  echo "$i"
done
▲1から10までを順番に表示する(fortest)
$ chmod +x fortest
$ ./fortest
1
2
3
4
5
6
7
8
9
10
▲実行結果(fortest)

●算術式の活用

 「for ((式1; 式2; 式3))」の各ブロックでは、「,」で区切ることで複数の式を書くことができます。また、「(( ))」を使った算術式は、for以外の所でも使用できます。

 それぞれ、以下のスクリプトで試してみましょう。

#! /bin/bash
for ((i=1, j=1; i <= 10; i++, j+=2))	#(1)〜(3)
do
  ((sum=i+j))				#(4)
  echo $i + $j = $sum			#(5)
done
▲複数の式を使用する(fortestを加工)

 最初に、変数iと変数jにそれぞれ「1」を入れています(1)。繰り返しの条件は“iが10以下である間”です(2)。そして、繰り返すごとにiは1ずつ増加させ、jは2ずつ増加させています(3)

 この繰り返しの間、変数sumに「i足すj」の結果を保存して(4)、echoコマンドで「変数iの値 + 変数jの値 = 変数sumの値」を表示しています(5)

 このスクリプトを実行すると、以下のようになります。

$ ./fortest
1 + 1 = 2
2 + 3 = 5
3 + 5 = 8
4 + 7 = 11
5 + 9 = 14
6 + 11 = 17
7 + 13 = 20
8 + 15 = 23
9 + 17 = 26
10 + 19 = 29
▲実行結果(fortest)

 なお、この「((〜))」の部分は、let」コマンドで書くこともできます。letコマンドは、bashのビルトインコマンドです。

 例えば、「((sum=i+j))」は「let sum2=i+j」のように記述できます。

#! /bin/bash
for ((i=1, j=1; i <= 10; i++, j+=2))
do
  let sum2=i+j
  echo $i + $j = $sum
done
▲letコマンドで計算する(fortestを加工)

 また、本連載第24回で「expr」コマンドを使って計算していた箇所を、「(( ))」およびletコマンドで書くと以下のようになります。

#! /bin/bash
str1="100"
str2="200"
 ((sum1=str1+str2))
echo $sum1
let sum2=str1+str2
echo $sum2
▲letコマンドで計算する(calcvar2)
$ chmod +x calcvar2
$ ./calcvar2
300
300
▲実行結果(calcvar2)

算術式で使える演算子

 「((〜))」の中で書く算術式では、以下の表の演算子が使用できます。なお、表中では演算式の前後に空白を入れていますが、この空白は入れても入れなくても構いません。例えば、「i=j+3」のように書くことも、「i = j + 3」のように書くことも可能です。

 なお、計算できるのは整数のみで、割り算の結果も整数となります。実数の計算が必要な場合はbc」コマンドを使うとよいでしょう。

●算術式で使える主な演算子(加減乗除)
演算子 意味
変数++ 変数の値を1増やす(インクリメント)
変数-- 変数の値を1減らす(デクリメント)
** 累乗
* 乗算
/ 除算(割り算)
% 剰余(余り)
+ 加算
- 減算
※「++変数」「--変数」という書き方も可能です

●算術式で使える主な演算子(比較)
演算子 意味
数1 <= 数2 数1が数2と同じか小さければTRUE
数1 >= 数2 数1が数2と同じか大きければTRUE
数1 < 数2 数1が数2より小さければTRUE
数1 > 数2 数1が数2より大きければTRUE
数1 == 数2 数1と数2が同じであればTRUE
数1 != 数2 数1と数2が同じでなければTRUE

●算術式で使える主な演算子(代入)
演算子 意味
変数 = 数1 変数に数1を代入する
変数 *= 数1 変数に数1を掛けてその結果を代入する
変数 /= 数1 変数にその変数を数1で割った結果を代入する
変数 %= 数1 変数にその変数を数1で割った余りを代入する
変数 += 数1 変数に数1を加算して代入する
変数 -= 数1 変数に数1を減算して代入する

筆者紹介

西村 めぐみ(にしむら めぐみ)

もともとはDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの“PCヘルパー”やピンポイント研修なども行っている。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。