【新・実践シェルスクリプト講座 第4回】長いコマンドはもう打たない。「番号を選ぶだけ」の快適さを手に入れよう
こんにちは!「リナックス先生」です。
全4回の「新・実践シェルスクリプト講座」、いよいよ最終回です!
これまで、構築、監視、バックアップと、サーバー管理の裏側を自動化してきました。
コウ君、エンジニアライフは快適になった?
先生!おかげさまで裏側の仕事は全部スクリプトがやってくれてます。
でも、日々の細かい作業…例えば「ログをちょっと見たい」とか「念のため再起動したい」って時に、毎回長いコマンドを打つのが面倒で…。tail -f /var/log/httpd/access_log とか、長すぎて指が攣りそうです。
わかるわ。コマンドは「覚えるもの」じゃなくて「呼び出すもの」よ。
最終回は、そんな日々の作業を「メニュー画面から番号を選ぶだけ」で実行できる、あなた専用の「統合管理ツール」を作るわよ!
黒い画面が、まるでスマホアプリのように使いやすくなるわ!
新シリーズ「新・実践シェルスクリプト講座」の最終回は、**「対話型メニューツールの作成」**です。read コマンドによる入力受付と、case 文による条件分岐、そして while ループを組み合わせることで、コマンド入力を一切不要にする「管理メニュー」を構築します。
本講座のカリキュラム(全4回)
最後は、これまでの成果を一つにまとめる「コントローラー」を作ります。
- 黒い画面でポチポチするな!「Webサーバー構築(LAMP環境)」をボタン一発で全自動化する【完了】
- Webサイトが死んだら自動で蘇生せよ!「サービス死活監視」と「自動再起動」【完了】
- ローカル保存じゃ終わらない!「DBバックアップ」と「AWS S3/クラウドへの自動転送」【完了】
- 【今回】黒い画面をアプリ化!?「対話型メニュー」で作る自分だけの管理ツール
1. 「対話型スクリプト」の仕組み
通常のスクリプトは、実行したら最後まで一気に処理して終わります。
しかし、今回作るのは「ユーザーの入力を待って、それに応じた処理をする」スクリプトです。
必要な技術はたった3つです。
- 表示:
echoでメニューを表示する。 - 入力:
readコマンドでキーボード入力を受け取る。 - 分岐:
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)で!


コメント