シェルスクリプトに挑戦しよう(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文」を使用します。


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

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

●算術式の活用

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

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

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

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

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

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

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

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

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

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

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

  1. #! /bin/bash
  2. str1="100"
  3. str2="200"
  4. ((sum1=str1+str2))
  5. echo $sum1
  6. let sum2=str1+str2
  7. echo $sum2
▲letコマンドで計算する(calcvar2)
  1. $ chmod +x calcvar2
  2. $ ./calcvar2
  3. 300
  4. 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.

スポンサーからのお知らせPR

Linux �ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス OSS 鬯ッ�ッ�ス�ョ�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�ェ鬯ョ�ッ陋ケ�コ�ス�サ郢ァ謇假スス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ョ�」陋ケ�ス�ス�ス�ス�オ鬮ォ�エ遶擾スオ�ス�コ�ス�キ�ス�ス�ス�ク�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ケ鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ゥ陝キ�「�ス�ス�ス�「鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ー

鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ッ譎「�ス�キ�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ャ鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬯ッ�イ�ス�ス�ス�シ陞滂スイ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�・鬯ッ�ョ�ス�ォ�ス�ス�ス�エ鬮ッ譎「�ス�カ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�」�ス�ス�ス�ス�ス�ス�ス�ッ鬯ョ�」陷エ�ス�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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