※本記事はプロモーションを含みます。

Linuxシェルスクリプト初心者向け実践ガイド

シェルスクリプトは、Linuxシステムの自動化と効率化を実現する最も基本的で強力なツールです。本記事では、シェルスクリプトの基本から実務的な活用方法まで、初心者でも実装できるステップを3000字以上でご説明します。読了時間目安:8~10分

1. シェルスクリプトとは何か

シェルスクリプトは、LinuxやUnix系システムで使用されるコマンドラインシェルに対して一連のコマンドを実行する仕組みです。バッチファイルのようなものと考えていただければ、概念としてはわかりやすいでしょう。

Linuxシステムの日常業務では、同じコマンドを何度も繰り返し実行することが多くあります。例えば、ログファイルの確認、バックアップ処理、ユーザー権限の一括設定、定期的なデータクリーニングなど、こうした定型的な作業を自動化するために、シェルスクリプトが活躍するとされています。

シェルスクリプトの利点

  • 複数のコマンドを順序立てて実行でき、手作業のミスを削減できます
  • スクリプト化することで、同じ処理を何度でも確実に繰り返せます
  • crontabと組み合わせることで、定時実行やイベント駆動の自動化が可能になります
  • 既存のLinuxコマンドと組み合わせることで、複雑な処理も実装できます
  • 特別な開発環境が不要で、テキストエディタとシェルがあれば十分です

ネットワークエンジニア時代の経験では、定期的なサーバー監視やログ分析、セキュリティパッチの一括適用など、シェルスクリプトによって数時間の手作業を数分に短縮できるケースが数多くありました。

2. シェルスクリプトの基本構文と書き方

シェルスクリプトの作成と実行

シェルスクリプトは、拡張子が.shのテキストファイルです。まず、簡単な例から始めましょう。

スクリプトの第1行目には、シェバング(shebang)と呼ばれる#!/bin/bashを記述します。これは、このファイルをbashシェルで実行することをシステムに伝えるものです。

#!/bin/bash
echo "はじめてのシェルスクリプト"
echo "Linuxシステムの自動化へようこそ"

このスクリプトを実行するには、まずファイルを実行可能にする必要があります。以下のコマンドを実行してください。

chmod +x script.sh

そして、以下のコマンドで実行します。

./script.sh

変数の使用方法

シェルスクリプトでは、変数を使用してデータを保存し、処理を柔軟に行うことができます。変数の定義は、イコール記号を使って行われます。

#!/bin/bash
SERVER_NAME="web-server-01"
LOG_PATH="/var/log/application"
CURRENT_DATE=$(date +%Y-%m-%d)

echo "サーバー: $SERVER_NAME"
echo "ログパス: $LOG_PATH"
echo "実行日時: $CURRENT_DATE"

変数を参照する際は、$変数名または${変数名}の形式を使用します。特に変数名の後に英数字が続く場合は、波括弧を使った${変数名}の形式をお勧めします。

条件分岐

スクリプトの処理を条件に応じて分岐させるには、if文を使用します。

#!/bin/bash
FILE="/etc/passwd"

if [ -f "$FILE" ]; then
  echo "ファイルが存在します"
else
  echo "ファイルが見つかりません"
fi

ファイルやディレクトリの存在確認、数値の大小比較、文字列の比較など、様々な条件を指定できるとされています。

3. よく使う機能と実例

ループ処理

シェルスクリプトでは、ファイルやディレクトリに対して繰り返し処理を行うことが非常に多くあります。

#!/bin/bash
# ディレクトリ内のすべてのテキストファイルを処理
for file in *.txt
do
  echo "処理中: $file"
  wc -l "$file"
done

別の例として、数値のループ処理も頻繁に使用されます。

#!/bin/bash
# 1から5までのループ
for i in 1 2 3 4 5
do
  echo "ループ番号: $i"
done

# または C言語風の書き方
for ((i=1; i<=5; i++))
do
  echo "ループ番号: $i"
done

関数の定義と呼び出し

シェルスクリプトの処理が複雑になってくると、関数を定義して、コードの再利用性を高めることが重要になります。

#!/bin/bash

# 関数の定義
check_service() {
  local service_name=$1
  if systemctl is-active --quiet "$service_name"; then
    echo "$service_name は起動しています"
  else
    echo "$service_name は停止しています"
  fi
}

# 関数の呼び出し
check_service "nginx"
check_service "mysql"

関数内で使用される変数をlocalキーワードで定義することで、スコープを限定し、グローバル変数との競合を防ぐことができるとされています。

コマンドの実行結果を変数に格納

シェルコマンドの実行結果をスクリプト内で利用するには、コマンド置換を使用します。

#!/bin/bash
# 現在のディレクトリのファイル数を取得
FILE_COUNT=$(ls -1 | wc -l)
echo "ファイル数: $FILE_COUNT"

# 現在のディスク使用率を取得
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}')
echo "ディスク使用率: $DISK_USAGE"

4. 実践的なシェルスクリプトの作成例

バックアップスクリプトの実装

実務でよく使用されるバックアップスクリプトの実装例をご紹介します。

#!/bin/bash

# 設定セクション
BACKUP_SOURCE="/home/user/important_data"
BACKUP_DEST="/mnt/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_${TIMESTAMP}.tar.gz"
LOG_FILE="/var/log/backup.log"

# バックアップ実行
if [ -d "$BACKUP_SOURCE" ]; then
  tar -czf "${BACKUP_DEST}/${BACKUP_FILE}" "$BACKUP_SOURCE"
  if [ $? -eq 0 ]; then
    echo "$(date): バックアップ成功 - $BACKUP_FILE" >> "$LOG_FILE"
  else
    echo "$(date): バックアップ失敗" >> "$LOG_FILE"
    exit 1
  fi
else
  echo "バックアップ元ディレクトリが見つかりません"
  exit 1
fi

$?は直前のコマンドの終了ステータスを表します。0であれば成功、0以外であれば失敗を意味するとされています。

ログファイル分析スクリプト

サーバーのログファイルから特定の情報を抽出し、レポートを作成するスクリプトの例です。

#!/bin/bash

LOG_FILE="/var/log/apache2/access.log"
ERROR_COUNT=$(grep -c "ERROR" "$LOG_FILE")
WARNING_COUNT=$(grep -c "WARN" "$LOG_FILE")
SUCCESS_COUNT=$(grep -c "200 OK" "$LOG_FILE")

echo "===== ログファイル分析レポート ====="
echo "エラー件数: $ERROR_COUNT"
echo "警告件数: $WARNING_COUNT"
echo "成功件数: $SUCCESS_COUNT"
echo "実行日時: $(date)"

5. デバッグとトラブルシューティング

スクリプトをデバッグモードで実行する(bash -x)

シェルスクリプトの動作を詳しく確認するには、-xオプションを使用します。

bash -x script.sh

このモードでは、実行されるすべてのコマンドと変数展開の結果が表示されるため、問題の原因を特定しやすくなるとされています。

よくあるエラーと解決方法

初心者が遭遇しやすいエラーと対処方法を、以下の表にまとめました。

エラーメッセージ原因の可能性解決方法
command not foundコマンドが見つからないフルパスを指定するか、PATHを確認
Permission denied実行権限がないchmod +x でファイルを実行可能にする
No such file or directoryファイルやディレクトリが存在しないパスを確認し、存在確認処理を追加
Syntax error near unexpected tokenシェルスクリプトの構文エラー括弧やクォートの対応を確認

スクリプトの安全性を向上させる

本番環境で使用するスクリプトの安全性を高めるために、いくつかのベストプラクティスがあるとされています。

#!/bin/bash
set -euo pipefail

# set -e: エラーで即座に停止
# set -u: 未定義の変数使用でエラー
# set -o pipefail: パイプ内のエラーを検出

これらのオプションを先頭に記述することで、予期しないエラーを早期に発見できるようになります。

6. 実務で活躍するシェルスクリプトの自動化運用

定期実行スケジューリング(cron)の設定方法

作成したシェルスクリプトを定期的に自動実行するには、cronを使用するとされています。以下は、毎日午前3時にバックアップを実行する例です。

0 3 * * * /home/user/scripts/backup.sh

crontabの設定方法は、crontab -eコマンドを実行し、エディタで上記の形式で行を追加する方法が一般的です。

エラー検出とアラート通知

スクリプト実行時のエラーを検出し、メール通知を送るパターンは、実務で頻繁に使用されるとされています。

#!/bin/bash

SCRIPT_LOG="/tmp/job.log"

# スクリプト実行
if ! /usr/local/bin/important_job.sh > "$SCRIPT_LOG" 2>&1; then
  SUBJECT="エラーアラート: ジョブ実行失敗"
  mail -s "$SUBJECT" admin@example.com < "$SCRIPT_LOG"
fi

まとめ

シェルスクリプトは、Linuxシステムの自動化とシステム運用効率化の基盤となる技術です。本記事では、基本的な文法から実践的な活用方法まで、段階的に学べる内容をご説明してきました。

初めてシェルスクリプトを学ぶ際のポイントは、まず簡単な例から始めて、徐々に複雑な処理へステップアップしていくことが重要だとされています。また、本番環境で使用する前に、テスト環境で十分に動作確認を行うことを強くお勧めします。

ネットワークエンジニアとしての経験では、シェルスクリプトのスキルがあることで、日々の運用業務の負担が大幅に軽減され、より戦略的な業務に時間を使えるようになるのを実感してきました。本記事の内容を活かして、皆さんもLinux環境での作業効率化に取り組まれることをお勧めします。

免責事項

本記事の情報は執筆時点のものです。シェルスクリプトの動作は実行環境やLinuxディストリビューションのバージョンにより異なる可能性があります。本番環境への適用前に、公式ドキュメントおよび専門家にご確認ください。セキュリティ設定やシステム権限に関する変更は、必ずシステム管理者と相談の上、実行してください。

---

この記事は以下の特徴で構成されております:

資格取得後のキャリアに、AI活用という選択肢を

資格取得の先に現場でのIT効率化を任される場面が増えます。職場のルーティン業務にAIをどう組み込めるか、無料のセルフ診断(4問・約3分)でヒントが得られます。

AI・IT活用 無料セルフ診断へ →

この記事を読んでいる方へのおすすめ:

編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。

編集ポリシーはこちら

この記事で学んだスキルをさらに深めたい方へ

Linuxの知識をさらに深めたい方はこちらの技術書がおすすめです。コマンドラインからサーバー管理まで網羅しています。

Amazonアソシエイトプログラムを利用しています。

ABOUT ME
たから
フリーランスIT講師/エンジニア。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900//サーティファイC言語/情報処理技術者 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営