このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

シェルスクリプト:forコマンド

シェルスクリプト:forコマンド

 シェルスクリプトは、LinuxやUnixベースのシステムでタスクの自動化や管理を効率的に行うための強力なツールです。シェルスクリプトを使うことで、日常的な作業をスクリプトとして記述し、簡単に実行することができます。その中でも、繰り返し処理を行うためのループ構造は、複数のデータに対して同じ操作を繰り返す際に非常に役立ちます。

繰り返し処理

 繰り返し処理を行うコマンドには、whileコマンドの他にforコマンドがあります。forコマンドは変数に代入する値のリストに記載された内容を1つずつ変数に格納し、リストの値がなくなるまで、doとdoneの間に記述されたコマンドを繰り返し実行します。例えば、複数のファイルに対して同じ操作を行ったり、一定の範囲の数値を使って計算を繰り返したりする場合にforコマンドはよく使われます。

【構文】
for 変数名 in 変数に代入する値のリスト
do
 コマンド
done

forコマンドを用いたシェルスクリプトの例

例:名前のリストに対して挨拶メッセージを表示するスクリプト「greeting.sh」

テキストエディタ(nanoエディタ)などで「greeting.sh」を作成します。

・「nano greeting.sh 」コマンドを実行します。

user01@ubuntu-vm:~$ nano greeting.sh

 以下のシェルスクリプトを入力したら、「Ctrl + S」 を押して、内容を保存して「Ctrl + X」 を押して nano を終了します。

#!/bin/bash

for name in Alice Bob Charlie
do
  echo "Hello, $name!"
done
「greeting.sh」スクリプトの解説
行番号コード説明
1#!/bin/bashシェルスクリプトのインタプリタを指定します。
3for name in Alice Bob Charliename変数にAlice、Bob、Charlieを順番に代入します。
4doループの開始を示します。
5echo “Hello, $name!”name変数に代入された値を使って挨拶メッセージを表示します。
6doneループの終了を示します。
「greeting.sh」スクリプトの解説
「greeting.sh」スクリプトの実行

・「bash greeting.sh」コマンドを実行します。

user01@ubuntu-vm:~$ bash greeting.sh
Hello, Alice!
Hello, Bob!
Hello, Charlie!

seqコマンド

seqコマンドは、指定した範囲の数値を生成するコマンドです。「seq」は、「sequence”の略語。

【構文】
seq 終了値
 または
seq 開始値 終了値
 または
seq 開始値 間隔値 終了値

seqコマンドの実行例
  • seq 5:1から5までの数値を生成します。
user01@ubuntu-vm:~$ seq 5
1
2
3
4
5
  • seq 3 7:3から7までの数値を生成します。
user01@ubuntu-vm:~$ seq 3 7
3
4
5
6
7
  • seq 1 2 9:1から9まで、2ずつ増加する数値を生成します。
user01@ubuntu-vm:~$ seq 1 2 9
1
3
5
7
9

forコマンドとseqコマンドを用いたシェルスクリプトの例

例:1から5までの数値を表示するスクリプト「num_display.sh」

テキストエディタ(nanoエディタ)などで「num_display.sh」を作成します。

・「nano num_display.sh 」コマンドを実行します。

user01@ubuntu-vm:~$ nano num_display.sh

 以下のシェルスクリプトを入力したら、「Ctrl + S」 を押して、内容を保存して「Ctrl + X」 を押して nano を終了します。

#!/bin/bash

for number in $(seq 1 5)
do
  echo "Number: $number"
done
num_display.sh」スクリプトの解説
行番号コード説明
1#!/bin/bashシェルスクリプトのインタプリタを指定します。
3for number in $(seq 1 5)number変数に1から5までの数値を順番に代入します。
4doループの開始を示します。
5echo “Number: $number”number変数に代入された値を使って数値を表示します。
6doneループの終了を示します。
num_display.sh」スクリプトの解説
$() 構文の解説

 $() はコマンド置換と呼ばれ、括弧内のコマンドを実行し、その結果をシェルスクリプト内で使用するための構文です。$(command) の形式で書かれ、commandの出力がその場所に展開されます。

$(seq 1 5) の意味

$(seq 1 5) は以下のように動作します。

  1. seq 1 5 が実行されます。
  2. seq 1 5 は、1, 2, 3, 4, 5 という数値を生成します。
  3. $() によって、この生成された数値がその場所に展開されます。

したがって、$(seq 1 5) は「1 2 3 4 5」と展開され、シェルスクリプトの中でこの数値列を使用することができます。

「num_display.sh」スクリプトの実行

・「bash num_display.sh」コマンドを実行します。

user01@ubuntu-vm:~$ bash num_display.sh
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
シェルスクリプトの削除

この演習で作成したシェルスクリプトを削除します。

・「rm greeting.sh num_display.sh」コマンドを実行し、「ls」コマンドで削除されたことを確認します。

user01@ubuntu-vm:~$ rm greeting.sh num_display.sh
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

  • forコマンドは、指定されたリストの各値に対して繰り返し処理を実行します。
  • seqコマンドは、指定した範囲の数値を生成します。
  • forコマンドとseqコマンドを組み合わせることで、指定範囲の数値に対する繰り返し処理を簡単に行うことができます。