第5章:実践演習 - 簡単なスクリプト作成

5.1 はじめてのシェルスクリプト

シェルスクリプトとは?

コマンドを順番に実行するプログラムです。繰り返し作業を自動化できます。

最初のスクリプト: hello.sh

$ nano hello.sh
#!/bin/bash # これはコメントです echo "Hello, Linux World!" echo "今日は $(date) です"
$ chmod +x hello.sh # 実行権限を付与
$ ./hello.sh # 実行
Hello, Linux World!
今日は Mon Jan 15 10:30:45 JST 2025 です

5.2 実践!バックアップスクリプト

backup.sh - 重要ファイルのバックアップ

#!/bin/bash # バックアップ元とバックアップ先 SOURCE="$HOME/Documents" BACKUP_DIR="$HOME/backups" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="backup_${DATE}.tar.gz" # バックアップディレクトリ作成 mkdir -p "$BACKUP_DIR" # バックアップ実行 echo "バックアップを開始します..." tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE" 2>/dev/null # 結果確認 if [ $? -eq 0 ]; then echo "✅ バックアップ成功: $BACKUP_FILE" ls -lh "$BACKUP_DIR/$BACKUP_FILE" else echo "❌ バックアップ失敗" exit 1 fi # 古いバックアップを削除(7日以上前) find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete echo "7日以上前のバックアップを削除しました"

使い方:

$ chmod +x backup.sh
$ ./backup.sh

5.3 cronで定期実行

定期バックアップの設定

$ crontab -e
# 毎日午前3時にバックアップ実行 0 3 * * * /home/user/scripts/backup.sh # 毎週月曜日にシステムレポート作成 0 9 * * 1 /home/user/scripts/sysinfo.sh > /home/user/weekly_report.txt # 毎月1日に古いログを削除 0 0 1 * * find /home/user/logs -name "*.log" -mtime +30 -delete

cron記法の説明

分 時 日 月 曜日 コマンド
*  *  *  *  *    command

例:
*/5 * * * *  5分ごと
0 */2 * * *  2時間ごと
0 9-17 * * 1-5  平日9-17時の毎時0分
                

5.4 学習のまとめ

🎯 この章で学んだこと

  • シェルスクリプトの基本構造(#!/bin/bash)
  • 変数の定義と使用方法
  • 条件分岐(if文)による処理制御
  • コマンド置換($(command))の活用
  • cronによる定期実行の設定

📚 次のステップ

  • ループ処理(for, while文)の学習
  • 関数の定義と活用
  • より複雑な条件分岐(case文)
  • エラーハンドリングの実装

💡 スクリプト作成のコツ

  • 小さく始める:まず簡単な処理から作る
  • コメントを書く:後で見返した時のために
  • エラー処理を入れる:想定外の状況に備える
  • テストする:本番前に必ずテスト環境で実行
  • バージョン管理:gitなどで管理する

⚠️ セキュリティの注意点

  • パスワードをスクリプトに直接書かない
  • 実行権限は必要最小限に
  • 入力値の検証を行う
  • rm -rf などの危険なコマンドは慎重に