シェル配列(Shell Arrays)

ShellBeginner
オンラインで実践に進む

はじめに

この実験では、シェルプログラミングにおける配列(Arrays)の扱い方を学びます。配列とは、複数の値を一つの名前でまとめて保存できるデータ構造のことで、これを利用することでデータの整理や操作が格段に容易になります。

具体的には、配列の初期化、要素の追加、インデックス(添字)による要素へのアクセス、そして配列内の要素数の確認方法を習得します。これらの知識は、より高度なシェルスクリプトの作成やデータ処理タスクにおいて不可欠な基礎となります。

これはガイド付きの実験(Guided Lab)であり、学習と実践を助けるためのステップバイステップの指示が提供されます。各ステップの指示に従って進めることで、実戦的な経験を積むことができます。これまでのデータによると、この実験は初心者レベルで、完了率は97%、学習者からの高評価率は100%となっています。

新しいシェルスクリプトファイルの作成

まずは、配列の操作を記述するための新しいシェルスクリプトファイルを作成することから始めましょう。

  1. WebIDE のターミナルを開きます。

  2. プロジェクトディレクトリに移動します:

    cd ~/project
  3. touch コマンドを使用して、arrays.sh という名前の新しいファイルを作成します:

    touch arrays.sh
  4. WebIDE で arrays.sh ファイルを開きます。

空の配列を初期化する

スクリプトファイルが用意できたので、まずは 3 つの空の配列を初期化してみましょう。

arrays.sh ファイルに以下のコードを追加してください:

#!/bin/bash

## 空の配列を初期化
NUMBERS=()
STRINGS=()
NAMES=()

このコードの内容を解説します:

  • 最初の行 #!/bin/bash はシバン(shebang)と呼ばれます。これは、このスクリプトが Bash シェルによって実行されるべきであることをシステムに伝えます。
  • ここでは NUMBERSSTRINGSNAMES という 3 つの空の配列を作成しています。
  • () という構文を使うことで、中身が空の配列を初期化できます。

配列に要素を追加する

空の配列が作成できたので、次に要素を追加してみましょう。

arrays.sh ファイルの配列初期化コードの下に、以下のコードを追加してください:

## NUMBERS 配列に要素を追加
NUMBERS+=(1)
NUMBERS+=(2)
NUMBERS+=(3)

## STRINGS 配列に要素を追加
STRINGS+=("hello")
STRINGS+=("world")

## NAMES 配列に要素を追加
NAMES+=("John")
NAMES+=("Eric")
NAMES+=("Jessica")

このコードの動作は以下の通りです:

  • += 演算子を使用して、配列の末尾に要素を追加(アペンド)しています。
  • NUMBERS には、整数 1、2、3 を追加しています。
  • STRINGS には、文字列 "hello" と "world" を追加しています。
  • NAMES には、"John"、"Eric"、"Jessica" の 3 つの名前を追加しています。
  • 文字列の要素は引用符(" ")で囲みますが、数値の場合は引用符は不要です。

配列の要素数を確認する

配列を扱う際によく行われる操作の一つに、配列にいくつの要素が含まれているかを調べるというものがあります。NAMES 配列を使って確認してみましょう。

arrays.sh ファイルに以下のコードを追加してください:

## NAMES 配列の要素数を取得
NumberOfNames=${#NAMES[@]}

この行では以下の処理を行っています:

  • ${#NAMES[@]} は、NAMES 配列内の要素の総数を返します。
  • この値を NumberOfNames という変数に格納しています。
  • 括弧内の @ 記号は、配列のすべての要素を参照することを意味します。
  • NAMES の前にある # 記号は、要素をカウントするようにシェルに指示します。

配列の特定の要素にアクセスする

次に、NAMES 配列の特定の要素にアクセスしてみましょう。ここでは 2 番目の名前を取得します。

arrays.sh ファイルに以下のコードを追加してください:

## NAMES 配列の2番目の名前にアクセス
second_name=${NAMES[1]}

このコードの解説:

  • ${NAMES[1]} を使って、NAMES 配列の 2 番目の要素にアクセスしています。
  • Bash の配列インデックス(添字)は 0 から始まる ことに注意してください。そのため、[1] を指定することで 2 番目の要素を取得できます。
  • 取得した値を second_name という変数に格納しています。

配列と変数の内容を出力する

最後に、これまでの操作結果を確認するために、配列と変数の内容を出力するコードを追加しましょう。

arrays.sh ファイルの末尾に以下のコードを追加してください:

## 配列と変数を出力
echo "NUMBERS array: ${NUMBERS[@]}"
echo "STRINGS array: ${STRINGS[@]}"
echo "The number of names listed in the NAMES array: $NumberOfNames"
echo "The second name on the NAMES list is: $second_name"

このコードの動作は以下の通りです:

  • echo コマンドを使用して、コンソールに文字列を出力します。
  • ${NUMBERS[@]}${STRINGS[@]} は、それぞれの配列の全要素を出力します。
  • 先ほど作成した NumberOfNamessecond_name 変数の値を出力します。

スクリプトの実行

スクリプトが完成したので、実際に実行して結果を確認しましょう。

  1. ターミナルで、正しいディレクトリにいることを確認します:

    cd ~/project
  2. スクリプトに実行権限を付与します:

    chmod +x arrays.sh
  3. スクリプトを実行します:

    ./arrays.sh

以下のような出力が表示されるはずです:

NUMBERS array: 1 2 3
STRINGS array: hello world
The number of names listed in the NAMES array: 3
The second name on the NAMES list is: Eric

この出力から、配列操作が正しく行われたことがわかります:

  • NUMBERS 配列には 1, 2, 3 が含まれています。
  • STRINGS 配列には "hello" と "world" が含まれています。
  • NAMES 配列の要素数が正しく 3 とカウントされています。
  • 2 番目の名前として "Eric" が正しく取得されています。

まとめ

この実験では、シェルスクリプトにおける配列操作の基本を学びました。配列の初期化、要素の追加、特定の要素へのアクセス、そして要素数の取得方法を実践しました。これらのスキルは、データのリストを扱ったり、複数の項目に対して一括で処理を行ったりするような、より高度なシェルスクリプトを作成する際に非常に重要です。配列を活用することで、シェルスクリプト内でのデータ管理が効率化され、より整理されたコードを書くことができるようになります。