はじめてのシェルスクリプト入門|日常作業を自動化する基本構文と実例解説

はじめてのシェルスクリプト入門|日常作業を自動化する基本構文と実例解説

はじめてのシェルスクリプト入門|日常作業を自動化する基本構文と実例解説

シェルスクリプトを使えば、バックアップやログ整理などの面倒な作業を自動化できます。この記事では初心者にもわかりやすく、基本構文から実践的な例まで丁寧に解説します。

目次

シェルスクリプトとは|日常作業自動化のメリット

シェルスクリプトは、複数のシェルコマンドをまとめて実行するプログラムで、拡張子は一般的に .sh を使います。bash や sh といったシェル環境で動作し、日々のバックアップやログ整理などの定型作業を自動化できます。

手作業のミスを減らし、作業時間を短縮できるうえ、スクリプト化によって処理の再現性が高まります。チームで共有すれば運用の均質化にも役立ち、多人数環境でも安定運用が可能です。

シェバン(#!/bin/bash)の基本と役割

スクリプト先頭の「#!」はシェバンと呼ばれ、後続に記述したシェルを使ってスクリプトを解釈します。

bash を指定する場合は #!/bin/bash が基本ですが、環境によってパスが異なることもあります。その際は #!/usr/bin/env bash と記述すると、環境変数 PATH に従って最適な bash を検索します。実行権限付与後に ./script.sh で呼び出す場合、この行が正しく作用します。

変数の宣言と利用方法|データを扱う

変数は NAME=value の形式で宣言し、展開時は $NAME または ${NAME} を使います。宣言時に「= の前後にスペースを入れるとエラーになる」点に注意しましょう。

コマンドの実行結果を変数化する場合は RESULT=$(command) のように書きます。${NAME} を使うと、変数名の直後に文字列が続く場合でも正確に展開できます。

引数の基本操作|コマンドライン入力を活用

スクリプトに外部引数を渡すには位置パラメータ $1$9 を利用します。$0 はスクリプト名自体を表し、$# で引数の総数を取得できます。

全引数を扱う $@$* は似ていますが、ダブルクォートで囲んだ場合に挙動が異なるため、"$@" が推奨されます。shift で引数を順次シフトする方法も覚えておくと便利です。

条件分岐(if文)による処理分岐

条件分岐は iffi で記述します。POSIX互換の単一括弧 [ ] と bash拡張の二重括弧 [[ ]] があり、後者では論理演算子 &&|| やパターンマッチが利用可能です。

数値比較(-eq)、文字列比較(==)、ファイル判定(-f:通常ファイル、-d:ディレクトリなど)を組み合わせると柔軟な分岐が実現します。

ループ構文(for, while)で繰り返し処理

forwhile を使って繰り返し処理を実装します。リスト処理は for file in *.log; do …; done、条件ループは while [ 条件 ]; do …; done です。

また、数値ループでは for ((i=1; i<=10; i++)); do が使えます。ファイル読み込みには while IFS= read -r line; do …; done < input.txt のように記述すると、空白やバックスラッシュを含む行でも安全に処理できます。

-r を指定することでエスケープ処理を無効化し、意図しない変換を防げます。

実践例:バックアップ自動化スクリプト

ホームディレクトリを日付付きでアーカイブする例です。
#!/usr/bin/env bash
BACKUP_DIR=/backup
TARGET_DIR=/home/user
mkdir -p "$BACKUP_DIR" || { echo "ディレクトリ作成失敗"; exit 1; }
DATE=$(date +%Y%m%d)
tar -czf "$BACKUP_DIR/home_$DATE.tar.gz" "$TARGET_DIR"

エラー処理を加えることでトラブル発生時の原因追跡が容易になります。cron に登録して定期実行すれば、バックアップの自動化とローテーション管理が両立します。

実践例:ログ整理(古いログの削除)

7日以上前のログを削除する例です。
#!/bin/bash
LOG_DIR=/var/log/myapp
echo "削除対象一覧:"
find "$LOG_DIR" -type f -mtime +7 -name "*.log" -ls
# 削除実行
find "$LOG_DIR" -type f -mtime +7 -name "*.log" -delete

-ls で対象を事前確認し、-delete オプションで安全に削除できます。-exec rm を使う場合は、削除前後にログを残す工夫が望ましいです。

スクリプトの実行権限と運用ポイント

スクリプトには chmod +x script.sh で実行権限を設定し、cron で定期実行する際はリダイレクトでログを保存します。
例:0 2 * * * /path/script.sh >> /var/log/script.log 2>&1

スクリプト冒頭にはコメントで目的や使用方法を記載し、set -e(エラー時停止)や set -x(デバッグ出力)を利用すると運用性が向上します。

ただし、set -e はパイプラインやサブシェル内では効かないことがあります。複雑な処理を行う場合は、明示的なエラーチェック(例:command || exit 1)も併用すると安全です。

まとめ|学習リソースと次のステップ

今回の基礎構文を押さえれば、バックアップやログ整理などの日常タスクを効率化できます。さらに cron や外部ツール連携を学ぶと、自動化の幅が広がります。

以下のリファレンスが参考になりますので、ぜひ目を通してみてください。
参考1:GNU Bash Reference Manual
参考2:crontab マニュアル

▼関連記事:ステップアップしたい方はこちら

Ansible超入門|構成管理・自動化を基礎から学ぶ決定版ガイド【初心者OK】

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次