このレッスンで学ぶこと
シェルスクリプトでは、文字列の操作と配列の活用が重要なスキルです。このレッスンでは、以下を学びます:
- 文字列の結合、分割、置換
- 部分文字列の抽出
- 配列の定義と操作
- 連想配列の使い方
文字列操作の基本
文字列の結合
#!/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データの処理
これらのスキルは、ログファイルの解析、設定ファイルの処理、データの整形など、多くの場面で活用できます。
次のステップ
次のレッスンでは、ファイル操作とテスト演算子について学び、より堅牢なスクリプトを書けるようになります。