シェルスクリプト実務テンプレ

サーバー運用やシステム管理の現場では、
“毎回同じ作業を手でやる” という非効率な時間が驚くほど多く存在します。

  • ログの整理
  • バックアップ
  • サービス監視
  • ファイル自動処理
  • メール・Slack通知

これらを自動化してミスゼロ&効率最大化するために欠かせないのが
シェルスクリプトです。

しかし…

「毎回書き方を調べ直してしまう…」
「例外処理やログ出力まで手が回らない…」
「実務で使えるテンプレが欲しい!」

という声もよく聞きます。


そこで本記事では、

✨現場でそのまま使えるシェルスクリプトテンプレ集✨

を目的別に整理してまとめました。

スクリプトで仕事を自動化し、
あなたの大切な時間を取り戻しましょう!💡

それでは実務に役立つテンプレを順番に紹介していきます。

★印で囲まれた部分を書き換えるだけで簡単にスクリプトが作成できます。
コピペ&編集してあなた好みのスクリプトを作成しましょう!

ファイル存在チェック

#!/bin/bash

set -e

check_file() {
local file=”$1″
[[ -f “$file” ]] || { echo “ERROR: $file が存在しません” >&2; exit 1; }
}

check_file “★/etc/passwd★”
echo “ファイル存在OK!”

ディレクトリ存在チェック + 無ければ作成

#!/bin/bash

ensure_dir() {
local dir=”$1″
[[ -d “$dir” ]] || mkdir -p “$dir”
}

ensure_dir “★/tmp/myapp/logs★”

日付付きバックアップ

#!/bin/bash

backup_file() {
local file=”$1″
local dest=”${file}.$(date +%Y%m%d_%H%M%S).bak”
cp “$file” “$dest”
echo “Backup created: $dest”
}

backup_file “★/etc/passwd★”

一時ファイルの生成 + 終了時削除

#!/bin/bash

set -e
tmpfile=★$(mktemp)★

cleanup() {
rm -f “$tmpfile”
}
trap cleanup EXIT

echo “一時ファイル: $tmpfile”

拡張子を変更してコピー

!/bin/bash

change_extension() {
local src=”$1″
local newext=”$2″
local dest=”${src%.*}.$newext”
cp “$src” “$dest”
echo “変換: $src → $dest”
}

change_extension “★data.txt★” “★csv★”

大量ファイルの一括削除(find)

#!/bin/bash

TARGET_DIR=”★/var/log/myapp★”

find “$TARGET_DIR” -type f -name “★*.log★” -exec rm -f {} \;

用途:ログや作業ファイルの整理
注意:削除前確認 → -exec rm を外すだけで確認可能

古いログファイルの削除(一定日数前)

#!/bin/bash

LOG_DIR=”★/var/log/myapp★”
DAYS=★30★

find “$LOG_DIR” -type f -mtime +$DAYS -exec rm -f {} \;

-mtime +30 → 30日より古いファイルを削除

差分コピー(rsync:バックアップ)

#!/bin/bash

SRC=”★/src/data/★”
DEST=”★/backup/data/★”

rsync -av –delete “$SRC” “$DEST”

rsyncオプション意味
-aパーミッション保持含むアーカイブ
-v途中経過表示
--delete片方にないファイルを削除=完全同期
設定ファイルの文字置換(sed)

#!/bin/bash

sed -i ‘s/★oldhost★/★newhost★/g’ ★/etc/myapp/config.conf★

安全版(バックアップ付き)

#!/bin/bash

sed -i.bak ‘s/★oldhost★/★newhost★/g’ ★/etc/myapp/config.conf★

空ファイルを一括作成(seq + touch)

#!/bin/bash

for i in $(seq ★1 10★); do
touch “file_$i.txt”
done

用途:初期ファイル準備、テスト用

CPU/メモリ監視(top / free)

#!/bin/bash

LOG=”★/var/log/resource_monitor.log★”

echo “=== $(date) ===” >> “$LOG”
top -b -n1 | head -5 >> “$LOG”
free -h >> “$LOG”
echo >> “$LOG”

一括パッケージインストール

環境構築の自動化

#!/bin/bash

PACKAGES=”★curl vim git htop★”

for pkg in $PACKAGES; do
if ! rpm -q “$pkg” &>/dev/null; then
sudo yum install -y “$pkg”
fi
done

Debian/Ubuntu 版に置換:apt-get install

ログローテーション簡易版

#!/bin/bash

LOG=”★/var/log/myapp/app.log★”
if [ -f “$LOG” ]; then
mv “$LOG” “${LOG}$(date +%Y%m%d%H%M%S)”
fi
touch “$LOG”

アプリ死活監視(systemctl)

#!/bin/bash

SERVICE=”★nginx★”

if ! systemctl is-active –quiet “$SERVICE”; then
echo “$SERVICE is down. restarting…”
systemctl restart “$SERVICE”
fi

一括権限変更(find + chmod)

#!/bin/bash

DIR=”★/var/www/html★”

find “$DIR” -type f -exec chmod ★644★ {} \;
find “$DIR” -type d -exec chmod ★755★ {} \;

ログキーワード検出(grep)

#!/bin/bash

LOG=”★/var/log/messages★”
KEYWORD=”★ERROR★”

if grep -q “$KEYWORD” “$LOG”; then
echo “Error detected!”
fi

複数サーバーへまとめてSSH実行

#!/bin/bash

HOSTS=(★”server1″ “server2” “server3″★)

for h in “${HOSTS[@]}”; do
ssh “$h” “★uptime★”
done

ネットワーク疎通チェック(複数宛先)

#!/bin/bash

HOSTS=(★”8.8.8.8″ “1.1.1.1” “example.com”★)

for h in “${HOSTS[@]}”; do
ping -c 1 “$h” >/dev/null 2>&1 \
&& echo “$h OK” \
|| echo “$h NG”
done

特定文字列を含むファイル抽出

#!/bin/bash

DIR=”★/var/log★”
KEYWORD=”★ERROR★”

grep -rl “$KEYWORD” “$DIR”

ディレクトリ容量チェック

#!/bin/bash

DIR=”★/var/log★”
SIZE=$(du -sh “$DIR” | awk ‘{print $1}’)
echo “Directory $DIR size: $SIZE”

複数サーバーに同一ファイル配布

#!/bin/bash

SERVERS=(“server1” “server2”)
FILE=”/tmp/config.conf”

for s in “${SERVERS[@]}”; do
scp “$FILE” “$s:/etc/myapp/config.conf”
done

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

コメント

コメントする

目次