「WindowsサーバーからLinuxサーバーへの移行が決まった。今まで使っていたJP1自動化バッチ、Linuxのシェルスクリプト(.sh)だとどう書けばいいんだろう……?」
インフラ環境のオープン化やクラウド移行に伴い、運用の現場でこんな課題に直面することは少なくありません。
以前、当ブログで「Windowsバッチ版のJP1一括コメント変更スクリプト」をご紹介しましたが、今回はその【Linux(Bash)版】を作成しました!
「ジョブユニットパス,変更後コメント」のCSVリストを読み込ませ、標準コマンド ajschange で一気に書き換えるスマートな仕組みです。そのままコピー&ペーストして使えるコードと、Linuxならではの設計ポイントを解説します!
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」と怒られてしまった場合は、以下のいずれかの対策を行ってください。
-
スクリプトを実行する前に、JP1の環境設定スクリプト(
/opt/jp1ajs2/bin/jp1_env.shなど)をsourceコマンド等で読み込む。 -
スクリプト内の
ajschangeの記述を、/opt/jp1ajs2/bin/ajschangeのように絶対パスに書き換える。
まとめ
WindowsからLinuxへの環境移行はスクリプトの作法が変わるため少し身構えてしまいますが、基本となる ajschange -C の安全性や便利さはそのまま引き継ぐことができます。
シェルスクリプトならではの強力なテキスト処理を活かして、Linux環境でのJP1運用自動化・メンテナンスもサクッと効率化していきましょう!
