HTMLで3000〜5000字のハウツー記事を完成させます。

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

シェルスクリプトは、業務効率化の第一歩です。Linuxの基本コマンドを組み合わせたスクリプトを自動実行させることで、手作業の繰り返しを大幅に削減できます。本記事では、元ネットワークエンジニアの立場から、初心者が今日からすぐに実践できるシェルスクリプト自動化の例を5つ紹介します。読了時間は約8分です。

目次

  • シェルスクリプトの基本を知ろう
  • 初心者向け・最初の一歩
  • 実務で役立つ自動化例5選
  • セキュリティ面での注意点
  • よくあるエラーと対処法
  • まとめ

シェルスクリプトの基本を知ろう

シェルスクリプトは、Linux・UNIX系OSで実行されるテキストファイルです。複数のコマンドを組み合わせ、一度に実行することで、日々の定型業務を自動化します。

シェルスクリプトとは

Linuxを使う際、ユーザーはシェル(コマンドラインインターフェース)を通じてOSと対話します。このシェルで実行できるコマンドを複数行記述したファイルを「シェルスクリプト」と呼びます。

身近な例として、以下のようなファイルを作成できます:

  • 毎日決まった時刻に特定のディレクトリをバックアップするスクリプト
  • 100個のファイルをリネームするスクリプト
  • ログファイルのサイズをチェックし、大きければ圧縮するスクリプト
  • 定期的にシステムの負荷状況をメール送信するスクリプト

実務では、これらの業務を1回のコマンド実行で完結させられるため、時間短縮に繋がります。

よく使うシェルの種類

Linuxには複数のシェルが存在します。一般的な3つを表にまとめました。

シェル特徴推奨度
bash(Bourne Again Shell)最も普及・スクリプティングに強い★★★★★
sh(Bourne Shell)シンプル・互換性が高い★★★
zshbashの拡張版・MacやLinuxで増加中★★★★

本記事ではbashを前提に解説します。ほとんどのLinuxディストリビューションに標準搭載されているため、学習効果が高いとされています。

初心者向け・最初の一歩

シェルスクリプトの作成手順

初めてのシェルスクリプト作成は、3ステップで十分です。

【ステップ1】ファイルを作成する

テキストエディタで新規ファイルを開き、以下の内容を記述します。

#!/bin/bash
echo "こんにちは、シェルスクリプト!"
date
pwd

1行目の「#!/bin/bash」はシェバング(shebang)と呼ばれ、このスクリプトをbashで実行することを指示します。必ず最初に記述してください。

【ステップ2】ファイルを保存する

ファイルを「hello.sh」という名前で保存します。拡張子は「.sh」が慣例です。

【ステップ3】実行権限を付与して実行

chmod +x hello.sh
./hello.sh

「chmod +x」でスクリプトを実行可能な状態にします。その後「./hello.sh」で実行できます。

変数と条件分岐の基本

シェルスクリプトでよく使う構文を2つ紹介します。

変数の使用

#!/bin/bash
USERNAME="Takashi"
AGE=30
echo "$USERNAMEさんは${AGE}歳です"

変数に値を格納し、「$変数名」で参照できます。

条件分岐

#!/bin/bash
HOUR=$(date +%H)
if [ $HOUR -lt 12 ]; then
  echo "おはようございます"
else
  echo "こんにちは"
fi

「if文」で時刻に応じた処理を分岐させます。このように条件判定を組み込むことで、柔軟なスクリプトが実現できます。

実務で役立つ自動化例5選

初心者が今すぐ実践可能な、業務効率化の例を5つ紹介します。

【例1】ログファイルの定期…

サーバー運用では、ログファイルが日々増加します。容量を節約するため、古いログを圧縮して別フォルダに移すスクリプトが重宝されています。

#!/bin/bash
BACKUP_DIR="/backup/logs"
LOG_DIR="/var/log"
DAYS=7

find $LOG_DIR -name "*.log" -mtime +$DAYS -exec gzip {} \;
mv $LOG_DIR/*.gz $BACKUP_DIR/

echo "ログバックアップ完了 $(date)" | tee -a /var/log/backup.log

このスクリプトは、7日以上前のログを圧縮し、バックアップディレクトリに移動させます。crontabで毎晩実行すれば、手作業は不要になります。

【例2】複数ファイルの一括…

デジタルカメラやスマートフォンで撮影した写真ファイルは、「IMG_001.jpg」といった汎用名が付きます。これを統一した名前に一括変更する場合、シェルスクリプトが活躍するとされています。

#!/bin/bash
COUNTER=1
for file in *.jpg; do
  NEW_NAME=$(printf "photo_%04d.jpg" $COUNTER)
  mv "$file" "$NEW_NAME"
  COUNTER=$((COUNTER + 1))
done

echo "ファイルリネーム完了"

「for文」で全JPGファイルをループし、順序を付けて自動的にリネームします。100個を超えるファイルでも数秒で完了します。

【例3】ディスク使用量の監…

ストレージ容量が限界に近いと、システムが不安定になる可能性があります。定期的に容量をチェックし、閾値を超えた場合にメール通知するスクリプトです。

#!/bin/bash
THRESHOLD=80
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')

if [ $USAGE -gt $THRESHOLD ]; then
  echo "ディスク使用率が${USAGE}%に達しました" | \
  mail -s "ストレージ警告" admin@example.com
fi

「df」コマンドで使用率を取得し、閾値(この例では80%)を超えていれば管理者にメール送信します。

【例4】定期的なデータベー…

Webアプリケーションを運用する場合、データベースの自動バックアップは必須業務とされています。MySQLを例にしたスクリプトを示します。

#!/bin/bash
DB_NAME="myapp_db"
BACKUP_DIR="/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

mysqldump -u root -p$DB_PASSWORD $DB_NAME | \
gzip > $BACKUP_DIR/backup_${DATE}.sql.gz

echo "バックアップ完了: backup_${DATE}.sql.gz"

データベースの内容をダンプファイルとして出力し、圧縮して保存します。毎日同じ時刻に自動実行させると、重要なデータを常に保護できます。

【例5】Webサイトの稼働…

本番環境では、Webサーバーが予期なく停止することがあります。定期的にアクセスして稼働確認し、応答がなければ自動で再起動するスクリプトは運用効率化に役立つとされています。

#!/bin/bash
URL="http://localhost:8080"
TIMEOUT=5

if curl -m $TIMEOUT $URL > /dev/null 2>&1; then
  echo "サーバー稼働中 $(date)"
else
  echo "サーバー応答なし。再起動します $(date)"
  systemctl restart apache2
  sleep 5
  if curl -m $TIMEOUT $URL > /dev/null 2>&1; then
    echo "再起動成功" | mail -s "サーバー再起動完了" admin@example.com
  fi
fi

curlコマンドでHTTPアクセスをテストし、失敗時は自動再起動を試みます。メール通知により、管理者が状況を把握できます。

セキュリティ面での注意点

危険な習慣を避ける

シェルスクリプトは強力なツールですが、使い方を誤るとセキュリティリスクになる可能性があります。以下の点に注意が必要とされています。

パスワードをスクリプトに埋め込まない

上記の例で「$DB_PASSWORD」という変数を使いましたが、スクリプト内に平文でパスワードを記述してはいけません。以下の方法が推奨されています。

  • 環境変数として外部ファイルから読み込む
  • パスワードファイル(.my.cnfなど)を別途準備
  • システムのキー管理ツール(AWS Secrets Manager等)を活用

ユーザー入力値の検証

スクリプトが外部からの入力を受け取る場合、検証なしで使用するとインジェクション攻撃の対象になる可能性があります。入力値をチェックしてから使用してください。

ファイルのパーミッション設定

シェルスクリプトが機密情報を扱う場合、ファイルは所有者のみが読み取れるように設定すべきとされています。

chmod 700 sensitive_script.sh

数値「700」は、所有者に読み取り・書き込み・実行権限を付与し、その他のユーザーをすべて排除します。

公式ドキュメントの確認

セキュリティ設定やコマンドのオプションは、バージョンやシステムにより変更される可能性があります。本番環境への適用前に、必ず公式ドキュメント・最新情報を確認してください。

よくあるエラーと対処法

実行権限エラー

エラー内容:「Permission denied」

スクリプトに実行権限がない場合に発生します。

chmod +x script.sh

この1行で権限を付与してください。

シェバングエラー

エラー内容:「bad interpreter」

1行目のシェバングが不正な場合に起こります。Windowsで作成したスクリプトをLinuxに移すと、改行コードの違いで発生する可能性があります。

dos2unix script.sh

「dos2unix」コマンドで改行コードをLinux形式に統一します。

変数が反映されない

エラー内容:変数が空になっている

変数参照時に「$」を忘れたり、クォート内で参照を忘れるとされています。

name="Takashi"
echo "Hello $name"        # 正:変数が展開される
echo 'Hello $name'        # 誤:文字列として出力される

シングルクォートは変数展開をしません。ダブルクォートを使用してください。

まとめ

シェルスクリプトは、Linuxの基本コマンド知識があれば、初心者でも業務効率化を実現できるツールです。毎日の定型作業を自動化することで、以下のメリットが期待できるとされています。

  • 時間短縮:数時間の手作業が数分で完了
  • 人的ミス削減:自動実行により確実性が向上
  • スケーラビリティ:スクリプトを複製すれば他の環境でも同じ処理が実行可能
  • スキル向上:スクリプト開発を通じてLinux知識が定着

本記事で紹介した5つの例は、実務環境でそのまま応用できるものばかりです。まずは簡単なスクリプトから始めて、徐々に複雑な処理に進むことをお勧めします。シェルスクリプトへの理解が深まれば、Pythonなどの高度なプログラミング言語学習への基盤にもなる可能性があります。

セキュリティに注意しながら、皆さんの業務を効率化するシェルスクリプト作成に挑戦してみてください。

免責事項

本記事の情報は執筆時点のものです。シェルスクリプトの実行結果はシステム環境によって異なります。本番環境での使用前に、十分なテスト・動作確認を行い、必ず公式ドキュメントで最新仕様をご確認ください。セキュリティ設定やシステム設定に関する判断は、必ず専門家にご相談の上、実施してください。本記事の実装により生じた損害について、執筆者は一切の責任を負いません。

完成しました。以下の要件をすべて満たしています:

ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営