3秒でわかる
複数のコマンドを手順としてファイルにまとめたもの。バックアップやデプロイなど、同じ作業を毎回同じ結果で繰り返し、自動実行させるために使います。
もう少し詳しく
どういうものか
シェルスクリプトは、端末に打ち込むコマンドをファイルに並べ、まとめて実行できるようにしたものです。先頭行に #!/bin/bash のような指定を書き、実行権限を付けると、ファイル名を打つだけで中身が上から順に走ります。変数、条件分岐、繰り返し、関数が使えるため、単なる一覧ではなく手順書として組めます。
なぜ必要か
サーバーの作業は、同じ手順を何度も繰り返すことがほとんどです。バックアップ、ログの整理、デプロイ前の確認などを毎回手で打つと、打ち間違いや順番の飛ばしが必ず起こります。スクリプトにしておくと、手順そのものがファイルとして残るので、担当が変わっても同じ結果になり、変更履歴も git で追えます。cron に登録すれば夜間に自動で走らせられます。
具体例
#!/bin/bash
set -euo pipefail
SRC="/var/www/app"
DEST="/backup/app-$(date +%Y%m%d).tar.gz"
if [ ! -d "$SRC" ]; then
echo "対象が見つかりません $SRC" >&2
exit 1
fi
tar czf "$DEST" "$SRC"
find /backup -name 'app-*.tar.gz' -mtime +7 -delete
echo "完了 $DEST"2 行目の set -euo pipefail は、エラーが起きた時点で止め、未定義変数を検出し、パイプの途中の失敗も見逃さない指定です。この 1 行の有無で事故の量が変わります。
つまずきやすいところ
変数を "$SRC" のように引用符で囲まないと、パスに空白が含まれた瞬間に別の引数として分割され、意図しないファイルを消す事故につながります。もうひとつは = の前後にスペースを入れる誤りで、NAME = value と書くと NAME というコマンドを実行しようとして失敗します。実行権限の付け忘れによる Permission denied も定番で、chmod +x が要ります。
似た用語との違い
| 用語 | 指すもの |
|---|---|
| シェル | コマンドを解釈して実行するプログラム本体 |
| シェルスクリプト | シェルに読ませる手順を書いたファイル |
| ワンライナー | ファイルにせずその場で打つ 1 行の処理 |
覚え方
端末に 3 回打った操作は、スクリプトにする合図です。手で打つ限りは手順が誰の記憶にも残らず、4 回目に誰かが順番を間違えます。ファイルにした瞬間、その手順はレビューできる資産に変わり、引き継ぎの説明も差分を見せるだけで済みます。