TeraTermマクロでvi編集

 マシンが増えたのでサブネットを多数のサーバで一気に変えなきゃという話があり、対象サーバを確認したところ、Windows系もあるけどCentOSの6系が多いとの事。サブネットを変えるにはどうしたらいいのかいろいろ調べたと所、CentOS6だと一時的なのはifconfigで行けるけど、恒久的な変更だとコンフィグファイル更新が必要らしい。ちなみにCentOS7だとまた別のコマンドらしい。windows系は調査中。。。
 という事でリモート端末から一気に複数のサーバを更新するという要件なので、とりあえずはTeraTermマクロを作ってそれを各サーバに繰り返すという形にします。
 下記例はログインや引数処理、該当ネットワーク名の取得等は割愛し、viコマンドによるファイル編集をマクロで実行する箇所をサブルーチンにし、それをコールする内容です。コンフィグファイルは/etc/syscomfigにある該当ネットワークのファイル(下記のCONFFILE)に指定し、検索文字列(下記のSEARCHSTR)はPREFIX=、サブネットをBit24にするとして上書文字列(下記のAPPENDSTR)に24をセットしてサブルーチンをコールしています。

CONFFILE='/etc/sysconfig/network-scripts/ifcfg-eth0'
SEARCHSTR='PREFIX='
APPENDSTR='24'
call CHANGECONF
end

:CHANGECONF
;コンフィグ変更サブルーチン 
; CONFFILE	コンフィグファイル名
; SEARCHSTR	検索文字列
; APPENDSTR	上書文字列

timeout= 3
CMD = 'vi '
strconcat CMD CONFFILE
sendln CMD

;/を送る
send '/'
pause 1
; 検索文字へ移動
sendln SEARCHSTR
pause 1
strlen SEARCHSTR
sendkcode 333 result

; Rで上書き
send 'R'

send APPENDSTR

; エスケープ
send #$1B

send ':'
pause 1
sendln 'wq!'
pause 1
 
; 終了
return

コマンド打った後にwaitlnとかでは出来ないのでpauseを入れてとりあえずは動く形になりましたが、環境によりタイミングは変わるのでエラーハンドリングを追加した方が良さそうです。