シェルスクリプトとは?できること・基本の書き方とインフラでの使い方

シェルスクリプトとは?できること・基本の書き方とインフラでの使い方

シェルスクリプトは、Linuxのコマンドをまとめて自動で実行するための仕組みです。サーバーを扱うインフラエンジニアにとって、毎日の運用作業を効率化する最初の道具になります。

ここでは、シェルスクリプトとは何かを、シェルとの関係から解説します。できることや基本の書き方に加えて、インフラの仕事での具体的な使い方もまとめました。

SUMMARY
この記事で分かること
  • シェルスクリプトとは何か、シェルとの関係と主な種類
  • シェルスクリプトでできることと、インフラの仕事での使い方
  • 変数・条件分岐・ループなど、基本の書き方と注意点

シェルスクリプトとは?

シェルとシェルスクリプトの関係

Linuxを操作するとき、私たちはコマンドを入力してOSに指示を出します。このとき、**人が入力したコマンドを受け取って、OSに伝える役割を持つのが「シェル」**です。

シェルスクリプトは、このシェルに実行させたいコマンドを、1つのファイルにまとめて書いたものです。ファイルを実行すると、書かれたコマンドが上から順に自動で実行されます。毎回手で入力していた一連の作業を、1回の実行で済ませられるようになります。

主なシェルの種類

シェルにはいくつかの種類があり、それぞれ書き方が少しずつ異なります。

シェル特徴
sh古くからある基本のシェル。多くの環境で動く
bashshを拡張したシェル。多くのLinuxで標準になっている
zsh便利な機能が多いシェル。macOSの標準
dash軽くて速いシェル。UbuntuやDebianでshとして使われている

Linuxのサーバーでは、bashが最も広く使われています。これから学ぶなら、まずはbashで書けるようになることを目指しましょう。

インフラエンジニアに必要とされる理由

シェルスクリプトの強みは、Linuxのサーバーなら何も追加せずに、すぐに使えることです。特別なソフトを入れる必要がなく、普段使っているコマンドをそのまま並べるだけで書けます。

インフラの運用では、バックアップや状態の確認など、同じ作業をくり返す場面が多くあります。こうした作業を自動化する最初の手段として、シェルスクリプトはインフラエンジニアの基本スキルになっています。

シェルスクリプトでできること

定型作業の自動化

ファイルのバックアップ、古いログの削除、ディレクトリの整理など、決まった手順でくり返す作業を自動化できます。手作業で起きがちな入力ミスや手順の抜けも防げます。

定期実行

Linuxには、決まった時間にコマンドを自動で実行する「cron(クロン)」という仕組みがあります。シェルスクリプトとcronを組み合わせると、毎日深夜にバックアップを取る、毎週ログを整理するといった作業を、人が操作しなくても実行できます。

サーバーの監視・状態確認

ディスクの空き容量、メモリの使用量、プロセスが動いているかどうかなどを確認し、問題があれば知らせる仕組みを作れます。障害に早く気づくための、簡単な監視の仕組みとして役立ちます。

構築作業の手順化

パッケージのインストールや設定ファイルの配置など、サーバーを構築するときの作業をスクリプトにしておけば、何台構築しても、毎回同じ手順で同じ状態にできます。作業の記録としても残るので、引き継ぎもしやすくなります。

シェルスクリプトの基本の書き方

作成から実行までの流れ

シェルスクリプトは、次の3つのステップで作って実行します。

  1. ファイルを作る:エディタで、拡張子「.sh」のファイルを作り、実行したいコマンドを書く
  2. 実行権限を付ける:chmod +x ファイル名 で、ファイルを実行できるようにする
  3. 実行する:./ファイル名 で実行する

ファイルの1行目には、#!/bin/bash のように、どのシェルで実行するかを書きます。この行は「シバン」と呼ばれ、書いておくことで、意図したシェルで確実に実行されます。

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

変数・条件分岐・ループ

変数

値に名前を付けて保存し、あとから使うことができます。「=」の前後にはスペースを入れないのがルールです。

#!/bin/bash
server=”web01″
echo “対象サーバー:${server}”

条件分岐

条件によって処理を分けます。次の例は、ディスクの使用率が80%以上なら警告を出すスクリプトです。

#!/bin/bash
usage=$(df / –output=pcent | tail -1 | tr -dc ‘0-9’)

if [ “$usage” -ge 80 ]; then
echo “警告:ディスク使用率が ${usage}% です”
else
echo “ディスク使用率は ${usage}% で正常です”
fi

ループ

同じ処理をくり返します。次の例では、3台のサーバー名を順に取り出して処理しています。

#!/bin/bash
for server in web01 web02 db01; do
echo “${server} の状態を確認します”
done

実践例:ログを圧縮してバックアップする

ここまでの書き方を使って、アプリのログを毎日圧縮してバックアップし、30日より古いものを削除するスクリプトを作ってみます。

#!/bin/bash
set -eu

LOG_DIR=”/var/log/myapp”
BACKUP_DIR=”/backup/logs”
TODAY=$(date +%Y%m%d)
KEEP_DAYS=30

mkdir -p “$BACKUP_DIR”

tar -czf “${BACKUP_DIR}/myapp-${TODAY}.tar.gz” -C “$LOG_DIR” .

find “$BACKUP_DIR” -name “myapp-*.tar.gz” -mtime +”$KEEP_DAYS” -delete

echo “バックアップが完了しました:myapp-${TODAY}.tar.gz”

それぞれの行では、次のことをしています。

行内容
set -euエラーが起きたら、その場で処理を止める
LOG_DIR などログの場所、保存先、今日の日付、保存する日数を変数に入れる
mkdir -p保存先のディレクトリがなければ作る
tar -czfログをまとめて圧縮し、日付入りのファイル名で保存する
find … -delete30日より古いバックアップを削除する
echo完了したことを表示する

このスクリプトをcronに登録すれば、毎日決まった時間に、自動でバックアップが取られるようになります。たとえば、毎日午前3時に実行するなら、cronに次のように設定します。

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

書くときの注意点

本番のサーバーでいきなり試さない

シェルスクリプトは、書いた内容をそのまま実行します。削除の処理などを間違えると、大事なファイルを消してしまうおそれがあります。まずはテスト用の環境で動きを確かめてから、本番のサーバーで使いましょう。

変数はダブルクォートで囲む

"$LOG_DIR" のように、変数はダブルクォートで囲んで使います。囲まないと、ファイル名にスペースが含まれていたときなどに、意図しない動きをすることがあります。

エラーで止まるようにする

スクリプトの最初に set -eu と書いておくと、エラーが起きたときや、値が入っていない変数を使ったときに、その場で処理が止まります。エラーを無視して処理が進み、被害が広がるのを防げます。

シェルスクリプトでよくある疑問

未経験でもシェルスクリプトは書けるようになる?

書けるようになります。シェルスクリプトは、普段使うLinuxのコマンドを並べるところから始められるので、Linuxの基本操作がわかれば、短いスクリプトはすぐに書けます。まずは、毎日手で打っているコマンドを1つのファイルにまとめてみましょう。

シェルスクリプトとPython、どう使い分ける?

Linuxのコマンドを組み合わせる短い処理なら、シェルスクリプトが手軽です。一方、データを細かく加工する処理や、クラウドのサービスを操作する処理など、複雑な処理になってきたらPythonが向いています。インフラの現場では、両方を使い分けるのが一般的です。

Pythonについては、[Pythonとは?]で解説しています。

Windowsでもシェルスクリプトは使える?

Windowsでも、WSL(Windows Subsystem for Linux)を使えば、Linuxの環境を用意してシェルスクリプトを動かせます。なお、Windowsのサーバーを自動化する場合は、Windows向けの「PowerShell」が使われます。

シェルスクリプトの力を証明できる資格はある?

シェルスクリプトだけを対象にした代表的な資格はありませんが、Linuxの資格であるLPICやLinuCの出題範囲に含まれています。

Linuxの知識とあわせて学ぶなら、[LPICとは?]や[Linuxのおすすめ資格一覧]も参考にしてください。

まとめ

シェルスクリプトは、Linuxのコマンドをまとめて自動で実行できる、インフラエンジニアにとって身近で強力な道具です。この記事のポイントは次のとおりです。

  • シェルスクリプトは、シェルに実行させるコマンドを1つのファイルにまとめたもの
  • Linuxのサーバーでは、標準のbashで書けるようになるのが基本
  • バックアップやログの整理、監視、構築作業の手順化など、運用の自動化に使える
  • cronと組み合わせれば、決まった時間に自動で処理を実行できる
  • 本番で使う前にテストし、変数のクォートやエラー時の停止を忘れない

まずは、毎日手で行っている作業を1つ選んで、スクリプトにしてみてください。小さな自動化の積み重ねが、インフラエンジニアとしての大きな力になります。

記事の企画・執筆

IT基盤(インフラ)エンジニアのための求人・情報サイト「テックドック」の編集部です。ネットワーク・サーバー・クラウド・セキュリティなど、IT基盤の仕事・技術・資格・キャリアに役立つ情報を、実務に即した視点で発信しています。