Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

JP1/AJS 「ジョブユニットパス,変更後コメント」のCSVリストを読み込ませて一括でコメントを書き換えるLinuxシェルスクリプト

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

Windows版はこちら

「WindowsサーバーからLinuxサーバーへの移行が決まった。今まで使っていたJP1自動化バッチ、Linuxのシェルスクリプト(.sh)だとどう書けばいいんだろう……?」

インフラ環境のオープン化やクラウド移行に伴い、運用の現場でこんな課題に直面することは少なくありません。

以前、当ブログで「Windowsバッチ版のJP1一括コメント変更スクリプト」をご紹介しましたが、今回はその【Linux(Bash)版】を作成しました!

「ジョブユニットパス,変更後コメント」のCSVリストを読み込ませ、標準コマンド ajschange で一気に書き換えるスマートな仕組みです。そのままコピー&ペーストして使えるコードと、Linuxならではの設計ポイントを解説します!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

1. コピペで使える!Linux(Bash)版の一括変更スクリプト

文字コード「UTF-8」、改行コード「LF」で保存してください。ファイル名は chg_jp1_comment.sh などがおすすめです。

Bash

#!/bin/bash

# 引数のチェック(リストファイルが指定されているか)
LIST_FILE="${1}"
if [ -z "${LIST_FILE}" ]; then
    echo "【エラー】引数にリストファイル(CSV)を指定してください。"
    echo "使い方: ${0##*/} [リストファイルパス]"
    exit 1
fi

if [ ! -f "${LIST_FILE}" ]; then
    echo "【エラー】指定されたファイルが見つかりません: ${LIST_FILE}"
    exit 1
fi

echo "===== JP1コメント一括変更処理 開始 ====="

# CSVファイルを1行ずつ読み込んで処理(カンマ区切り)
# 3列目以降の余計なデータがあっても吸い込めるように末尾に「REST」を配置
while IFS=',' read -r UNIT_PATH NEW_COMMENT REST
do
    # 空行や改行コードのみの行をスキップ
    [ -z "${UNIT_PATH}" ] && continue

    echo "--------------------------------------------------"
    echo "[対象ユニット]: ${UNIT_PATH}"
    echo "[変更後コメント]: ${NEW_COMMENT}"

    # ajschange コマンドでコメントを直接変更
    /opt/jp1ajs2/bin/ajschange -C "${NEW_COMMENT}" "${UNIT_PATH}" >/dev/null 2>&1
    
    # 実行結果の判定
    if [ $? -eq 0 ]; then
        echo "[結果] 成功: コメントを更新しました。"
    else
        echo "[結果] エラー: コメントの更新に失敗しました。パスや権限を確認してください。"
    fi

done < "${LIST_FILE}"

echo "=================================================="
echo "===== JP1コメント一括変更処理 終了 ====="
exit 0

2. 動かし方(2つのステップ)

Step 1. 実行権限を付与する

Linuxでスクリプトを実行できるようにするため、以下のコマンドで実行権限(x)を与えます。

Bash

chmod +x chg_jp1_comment.sh

Step 2. CSVを指定して実行する

用意したCSVリスト(例: list.csv)を引数に渡して実行します。

list.csvの例 ※「”」は不要。入れると”付きのコメントになる

AJSROOT1:/カレンダー/カレンダー1,カレンダー1
AJSROOT1:/カレンダー/カレンダー2,カレンダー2
AJSROOT1:/ジョブネット1,ジョブネット1
AJSROOT1:/ジョブネット2,ジョブネット2

Bash

./chg_jp1_comment.sh list.csv

3. Windows版から進化!Linux版の「技あり」設計ポイント

Windowsバッチ版に比べ、Linux(Bash)版はコードがさらにスッキリしつつ、より堅牢な作りになっています。

① 配列を使わないスマートな変数割り当て

Windows版では %%a%%b といった自動変数を使っていましたが、Bashでは read -r UNIT_PATH NEW_COMMENT と書くだけで、1列目のデータを UNIT_PATH に、2列目を NEW_COMMENT に直接、名前付きで格納できます。後からコードを見返した時の読みやすさが段違いです。

② 予期せぬデータ崩れを防ぐ「ゴミ箱変数(REST)」

以前の「CSVパースの罠」の記事でも触れましたが、もしCSV側に「3列目以降の不要なデータや余計なカンマ」が含まれていた場合、それらがコメント用の変数に混入してしまうリスクがあります。 今回は末尾に REST という使い捨て変数を配置することで、「余分なデータはすべてRESTに吸い込ませ、2列目のコメントだけを綺麗に切り出す」という防衛策を講じています。

③ エラーハンドリング($?)の確実性

Windowsの !errorlevel! に相当するものが、Linuxの $?(直前のコマンドの終了ステータスが入る特殊変数)です。ajschange が成功(0)したか失敗(それ以外)したかを1行ごとに厳密にチェックしているため、万が一特定のジョブネットだけ権限エラーなどで失敗した場合も、ログから一目で追跡可能です。

⚠️ 移行時の注意点:パスの壁

Linux環境のJP1では、標準で ajschange などのコマンドにパスが通っていないケースがよくあります。 もし実行時に「ajschange: command not found」と怒られてしまった場合は、以下のいずれかの対策を行ってください。

  1. スクリプトを実行する前に、JP1の環境設定スクリプト(/opt/jp1ajs2/bin/jp1_env.sh など)を source コマンド等で読み込む。

  2. スクリプト内の ajschange の記述を、/opt/jp1ajs2/bin/ajschange のように絶対パスに書き換える。

まとめ

WindowsからLinuxへの環境移行はスクリプトの作法が変わるため少し身構えてしまいますが、基本となる ajschange -C の安全性や便利さはそのまま引き継ぐことができます。

シェルスクリプトならではの強力なテキスト処理を活かして、Linux環境でのJP1運用自動化・メンテナンスもサクッと効率化していきましょう!

タイトルとURLをコピーしました