【新・実践シェルスクリプト講座 第4回】黒い画面をアプリ化!?「対話型メニュー」で作る自分だけの最強管理ツール

【新・実践シェルスクリプト講座 第4回】長いコマンドはもう打たない。「番号を選ぶだけ」の快適さを手に入れよう

こんにちは!「リナックス先生」です。
全4回の「新・実践シェルスクリプト講座」、いよいよ最終回です!
これまで、構築、監視、バックアップと、サーバー管理の裏側を自動化してきました。
コウ君、エンジニアライフは快適になった?

コウ君

先生!おかげさまで裏側の仕事は全部スクリプトがやってくれてます。
でも、日々の細かい作業…例えば「ログをちょっと見たい」とか「念のため再起動したい」って時に、毎回長いコマンドを打つのが面倒で…。
tail -f /var/log/httpd/access_log とか、長すぎて指が攣りそうです。

リナックス先生

わかるわ。コマンドは「覚えるもの」じゃなくて「呼び出すもの」よ。
最終回は、そんな日々の作業を「メニュー画面から番号を選ぶだけ」で実行できる、あなた専用の「統合管理ツール」を作るわよ!
黒い画面が、まるでスマホアプリのように使いやすくなるわ!

新シリーズ「新・実践シェルスクリプト講座」の最終回は、**「対話型メニューツールの作成」**です。
read コマンドによる入力受付と、case 文による条件分岐、そして while ループを組み合わせることで、コマンド入力を一切不要にする「管理メニュー」を構築します。

本講座のカリキュラム(全4回)

最後は、これまでの成果を一つにまとめる「コントローラー」を作ります。

  1. 黒い画面でポチポチするな!「Webサーバー構築(LAMP環境)」をボタン一発で全自動化する【完了】
  2. Webサイトが死んだら自動で蘇生せよ!「サービス死活監視」と「自動再起動」【完了】
  3. ローカル保存じゃ終わらない!「DBバックアップ」と「AWS S3/クラウドへの自動転送」【完了】
  4. 【今回】黒い画面をアプリ化!?「対話型メニュー」で作る自分だけの管理ツール

1. 「対話型スクリプト」の仕組み

通常のスクリプトは、実行したら最後まで一気に処理して終わります。
しかし、今回作るのは「ユーザーの入力を待って、それに応じた処理をする」スクリプトです。

必要な技術はたった3つです。

  1. 表示: echo でメニューを表示する。
  2. 入力: read コマンドでキーボード入力を受け取る。
  3. 分岐: case 文で、入力された数字に応じた処理に振り分ける。

これを while ループで囲むことで、「終了」を選ぶまで何度でも使えるツールになります。

2. 自分専用管理ツール「my_tool.sh」を作る

それでは、実用的な機能を詰め込んだ管理ツールを作成しましょう。
以下の機能を実装します。

  • [1] システム状態確認: メモリやディスク容量をサクッと表示。
  • [2] Webアクセスログ監視: tail -f を実行して流れるログを見る。
  • [3] サービス再起動: 調子が悪い時に Apache/DB を再起動する。
  • [4] DBバックアップ: 第3回で作ったバックアップスクリプトを呼び出す。
  • [9] 終了: ツールを閉じる。

vim my_tool.sh を作成します。

#!/bin/bash

# --- 安全設定(今回は対話型なので set -e は外しておく) ---
# ユーザーの入力ミスでスクリプトが落ちないようにするため
set -u

# ==========================================
# 関数定義(各機能の処理)
# ==========================================

# Enterキーを押すまで待機する関数(結果を見せるため)
pause() {
    read -p "Press [Enter] key to continue..."
}

# [1] システム状態
show_status() {
    echo "--- System Status ---"
    echo "[Memory]"
    free -h
    echo ""
    echo "[Disk]"
    df -h /
    echo ""
    echo "[Load Average]"
    uptime
    echo "---------------------"
    pause
}

# [2] ログ監視 (Ctrl+Cで止めてもメニューに戻るようにtrapする)
monitor_log() {
    echo "Apacheのアクセスログを表示します。(停止するには Ctrl+C)"
    sleep 1
    # tailコマンド実行中にCtrl+Cが押されたら、関数を抜けてメニューに戻る設定
    trap 'return' INT
    tail -f /var/log/httpd/access_log
    trap - INT # trap解除
}

# [3] サービス再起動
restart_services() {
    echo "WebサーバーとDBを再起動しますか? (y/n)"
    read -r ANSWER
    if [[ "$ANSWER" == "y" || "$ANSWER" == "Y" ]]; then
        echo "再起動中..."
        systemctl restart httpd
        systemctl restart mariadb
        echo "完了しました。"
    else
        echo "キャンセルしました。"
    fi
    pause
}

# [4] バックアップ実行
run_backup() {
    echo "DBバックアップを開始します..."
    # 第3回で作ったスクリプトがあれば実行
    if [ -f "/root/backup_db_s3.sh" ]; then
        bash /root/backup_db_s3.sh
        echo "バックアップスクリプトの実行が完了しました。"
    else
        echo "エラー: バックアップスクリプト(/root/backup_db_s3.sh)が見つかりません。"
    fi
    pause
}

# ==========================================
# メインループ (無限ループ)
# ==========================================
while true; do
    # 画面をクリアしてメニューを表示
    clear
    echo "========================================"
    echo "   My Server Manager v1.0"
    echo "   Host: $(hostname)"
    echo "========================================"
    echo "1. 📊 システム状態を確認 (Status)"
    echo "2. 📜 アクセスログを監視 (Log)"
    echo "3. 🔄 サービスを再起動 (Restart)"
    echo "4. 📦 DBバックアップ実行 (Backup)"
    echo "9. 🚪 終了 (Exit)"
    echo "========================================"
    
    # 入力を受け付ける (-pでプロンプト表示)
    read -p "コマンドを選択してください [1-9]: " CHOICE

    # 入力に応じた処理 (case文)
    case "$CHOICE" in
        1)
            show_status
            ;;
        2)
            monitor_log
            ;;
        3)
            restart_services
            ;;
        4)
            run_backup
            ;;
        9)
            echo "お疲れ様でした!"
            exit 0
            ;;
        *)
            echo "無効な入力です。"
            sleep 1
            ;;
    esac
done

💡 プロのテクニック:trap コマンドでCtrl+Cを制御する

通常、スクリプト実行中に Ctrl+C を押すと、スクリプト自体が強制終了してしまいます。
しかし、ログ監視(tail -f)などでは「ログを見るのをやめてメニューに戻りたい」だけですよね。
trap 'return' INT を書くことで、「Ctrl+C (SIGINT) が来たら、終了せずに今の関数から抜けるだけ」という挙動に変更できます。これが「アプリっぽい」挙動の秘密です。

3. 実行してみよう

chmod +x my_tool.sh
./my_tool.sh

実行すると、画面が切り替わり、カッコいいメニューが表示されるはずです。

========================================
   My Server Manager v1.0
   Host: my-vps-server
========================================
1. 📊 システム状態を確認 (Status)
2. 📜 アクセスログを監視 (Log)
3. 🔄 サービスを再起動 (Restart)
4. 📦 DBバックアップ実行 (Backup)
9. 🚪 終了 (Exit)
========================================
コマンドを選択してください [1-9]:

1 を押せばメモリが見れますし、2 を押せばログが流れます。
もう長いコマンドを思い出す必要はありません。

4. どこからでも「tool」で呼び出せるようにする

いちいち ./my_tool.sh と打つのも面倒ですよね。
tool と打つだけで起動するように、エイリアスを設定しましょう。

~/.bashrc を編集して、最後の行に以下を追加します。

alias tool='/root/my_tool.sh'

設定を反映させます。

source ~/.bashrc

これで、ログイン直後に tool と打つだけで、あなたの専用管理画面が立ち上がります。
これこそ、エンジニアだけの特権「俺専用コックピット」です!

講座のまとめ:シェルスクリプトは「魔法の杖」

シーズン2全4回、お疲れ様でした!
今回は「攻めの自動化」として、構築から運用ツール作成までを行いました。

作ったもの 身についたスキル
第1回 自動構築 sedによる設定ファイル書き換え
第2回 自動復旧 curl監視とsystemctl操作
第3回 クラウド転送 aws cli連携とBCP対策
第4回 管理ツール read, case, trapによる対話操作

シェルスクリプトは、サーバーエンジニアにとっての「魔法の杖」です。
面倒なことは杖を一振り(コマンド一発)で終わらせて、あなたはもっと創造的で楽しいことに時間を使いましょう。

コウ君

先生、本当にありがとうございました!
最初は黒い画面を見るだけで頭が痛かったのに、今では「どうやってこの作業を自動化しようかな?」ってワクワクしています。
僕、もっとすごいツールを作ってみます!

リナックス先生

頼もしくなったわね、コウ君!
その「楽をしたい」という欲求こそが、技術を進化させる原動力よ。
失敗してもサーバーは何度でも作り直せるわ。恐れずにどんどんコードを書いて、自分だけの最強サーバーを育て上げてね!

これで「新・実践シェルスクリプト講座」は完結です。
しかし、自動化の旅に終わりはありません。
ぜひ、あなた自身の専用サーバー(VPS)で、今回紹介したスクリプトを改造し、さらに便利な機能を詰め込んでみてください。

▼「tool」コマンドを作るなら、自分だけの実験場(VPS)で!

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント