本文へスキップ
BecomeCoder

シェルスクリプトコース · 第9章 実践 · レッスン43

まとめ ― 手作業を仕組みに変える

ブラウザで完結

導入

ここまでで、シェルスクリプトの基本はひととおり手に入りました。最後に、学んだ道具を1枚の地図にまとめ、この先どこへ進むかを確かめておきましょう。

説明

このコースで身につけたものを、書く順番どおりに並べるとこうなります。

#!/bin/bash
# 学んだ要素を1本にまとめた「型」

set -eu                                  # 第7章: 失敗したら止める

# --- 設定 ---(第2章)
TARGET_DIR="${1:-/home/user/logs}"       # 第7章: 既定値
TODAY=$(date +%Y-%m-%d)                  # 第2章: コマンド置換

# --- 部品 ---(第6章)
log() {
  echo "[$TODAY] $1"
}

# --- 事前チェック ---(第4章)
if [ ! -d "$TARGET_DIR" ]; then
  echo "エラー: $TARGET_DIR がありません" >&2
  exit 1                                 # 第3章: 終了ステータス
fi

# --- 本体 ---(第5章)
log "集計を開始します"
total=0
for file in "$TARGET_DIR"/*.log; do
  [ -f "$file" ] || continue             # 第4章: 一致が無いときの守り
  lines=$(wc -l < "$file")
  log "$file: $lines 行"
  total=$((total + lines))               # 第2章: 算術
done

log "合計 $total 行"
log "完了しました"
手に入れた道具
第1章スクリプトの作成・実行・シバン・実行権限
第2章変数・クォート・$( )$(( ))
第3章引数 $1 $#・リダイレクト・ヒアドキュメント・終了ステータス
第4章iftest [ ]・ファイル判定・case
第5章forwhilebreak/continuewhile read
第6章関数引数と戻り値localsource
第7章set -euo pipefail・クォートの徹底・trap・デバッグ
第8章cron・crontab の書式・落とし穴・systemd タイマー
第9章バックアップ・集計・監視の組み立て方
flowchart LR
    A["手で打つ<br/>(Linuxコマンド)"] --> B["ファイルにまとめる<br/>(シェルスクリプト)"]
    B --> C["条件と繰り返しで<br/>賢くする"]
    C --> D["安全に書く<br/>set -e / trap"]
    D --> E["cron で自動化"]
    E --> F["運用に載せる<br/>ログ・監視・排他"]

次に進む道は、大きく3つあります。

  • サーバー: 書いたスクリプトを動かす場所を知る。SSH・systemd・パッケージ管理・監視。
  • Docker: スクリプトごと環境を持ち運ぶ。DockerfileRUN の中身は、結局シェルです。
  • Git: スクリプトをバージョン管理する。crontab もファイルにして Git に入れるのが実務の作法でした。

そしてもう1つ。シェルスクリプトで書き続けないほうがいい場面も知っておいてください。数百行を超える、複雑なデータ構造を扱う、エラー処理が入り組む——そうなったら Python の出番です。「短く・単純に・コマンドをつなぐ」のがシェルの得意分野で、そこを外れたら別の道具に持ち替える。この判断ができるのも、実務の力量のうちです。

やってみよう

最後のスクリプトを実行して、学んだ要素が1本の中で協調して動くことを確かめましょう。次に sh script.sh /home/user/files として、引数で対象を切り替えてみてください(.log が無いので件数は0になります)。うまく動かないときは sh -x script.sh でトレースを取る——第7章で学んだデバッグの出番です。

演習

引数なしでスクリプトを実行し、logs ディレクトリの集計を完了させてください(合計 18 行 と出ます)。

ヒント1を見る

「▶ 実行」ボタン、または端末で sh script.sh

ヒント2を見る

logs には access.log(10行)と app.log(8行)があります。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。

このコースはここまで。次に学ぶなら

おつかれさまでした。ここまでの学びを土台に、関連するコースへ進めます。