メインコンテンツへスキップ
レッスン 7 / 12推定時間:

文字列操作と配列

シェルスクリプトでの文字列操作と配列の使い方を学びます

このレッスンで学ぶこと

シェルスクリプトでは、文字列の操作と配列の活用が重要なスキルです。このレッスンでは、以下を学びます:

  • 文字列の結合、分割、置換
  • 部分文字列の抽出
  • 配列の定義と操作
  • 連想配列の使い方

文字列操作の基本

文字列の結合

#!/bin/bash

# 文字列の結合
first_name="Taro"
last_name="Yamada"
full_name="$first_name $last_name"
echo "フルネーム: $full_name"

# 変数を直接結合
greeting="こんにちは、${first_name}さん!"
echo "$greeting"

文字列の長さ

#!/bin/bash

text="Hello, World!"
length=${#text}
echo "文字列の長さ: $length"

# 変数が空かチェック
if [ -z "$text" ]; then
    echo "文字列は空です"
else
    echo "文字列は空ではありません"
fi
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

部分文字列の操作

部分文字列の抽出

#!/bin/bash

text="Hello, World!"

# 先頭から指定文字数を抽出
echo "${text:0:5}"    # Hello

# 指定位置から最後まで
echo "${text:7}"      # World!

# 末尾から指定文字数
echo "${text: -6}"    # World!

パターンマッチングによる削除

#!/bin/bash

filename="document.txt.backup"

# 最短マッチで削除(前方)
echo "${filename#*.}"     # txt.backup

# 最長マッチで削除(前方)
echo "${filename##*.}"    # backup

# 最短マッチで削除(後方)
echo "${filename%.*}"     # document.txt

# 最長マッチで削除(後方)
echo "${filename%%.*}"    # document
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

文字列の置換

#!/bin/bash

text="Hello, World! Hello, Everyone!"

# 最初のマッチを置換
echo "${text/Hello/Hi}"         # Hi, World! Hello, Everyone!

# すべてのマッチを置換
echo "${text//Hello/Hi}"        # Hi, World! Hi, Everyone!

# 大文字・小文字変換
echo "${text^^}"                # HELLO, WORLD! HELLO, EVERYONE!
echo "${text,,}"                # hello, world! hello, everyone!

配列の基本

配列の定義と要素へのアクセス

#!/bin/bash

# 配列の定義
fruits=("apple" "banana" "orange" "grape")

# 要素へのアクセス
echo "${fruits[0]}"     # apple
echo "${fruits[2]}"     # orange

# すべての要素
echo "${fruits[@]}"     # apple banana orange grape

# 要素数
echo "${#fruits[@]}"    # 4

# 要素の追加
fruits+=("melon")
echo "${fruits[@]}"
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

配列のループ処理

#!/bin/bash

# 配列の定義
servers=("web01" "web02" "db01" "cache01")

# 値でループ
echo "サーバーリスト:"
for server in "${servers[@]}"; do
    echo "  - $server"
done

# インデックスでループ
echo -e "\nインデックス付きリスト:"
for i in "${!servers[@]}"; do
    echo "  [$i] ${servers[$i]}"
done

連想配列(Bash 4.0以降)

#!/bin/bash

# 連想配列の宣言
declare -A user_info

# 要素の設定
user_info[name]="田中太郎"
user_info[email]="tanaka@example.com"
user_info[age]="25"

# 要素へのアクセス
echo "名前: ${user_info[name]}"
echo "メール: ${user_info[email]}"

# すべてのキー
echo "キー: ${!user_info[@]}"

# すべての値
echo "値: ${user_info[@]}"
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

実践演習:CSVデータの処理

#!/bin/bash

# CSVデータを配列に読み込む
csv_line="田中太郎,35,東京都"

# IFSを使って分割
IFS=',' read -ra data <<< "$csv_line"

echo "名前: ${data[0]}"
echo "年齢: ${data[1]}"
echo "住所: ${data[2]}"

# 複数行のCSV処理
echo -e "\n--- 社員リスト ---"
while IFS=',' read -r name age location; do
    echo "$name ($age歳) - $location"
done << EOF
田中太郎,35,東京都
鈴木花子,28,大阪府
佐藤次郎,42,福岡県
EOF
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

まとめ

このレッスンでは、シェルスクリプトにおける文字列操作と配列の使い方を学びました:

  • 文字列操作: 結合、長さの取得、部分文字列の抽出、置換
  • 配列: インデックス配列の定義と操作
  • 連想配列: キーと値のペアでデータを管理
  • 実践的な活用: CSVデータの処理

これらのスキルは、ログファイルの解析、設定ファイルの処理、データの整形など、多くの場面で活用できます。

次のステップ

次のレッスンでは、ファイル操作とテスト演算子について学び、より堅牢なスクリプトを書けるようになります。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行