パスワードアカウントの大量発行なんてのはこの時期が旬。 passwdファイルベースでやってるところは減ってるかもしれんけどその話。
master.passwd にデータを追加するとき、 追加するユーザごとのエントリは大量なのでスクリプトで自動生成。でも、 vipwがviを呼ぶこともあって、実際のファイルへの追加は手動でやってた。 目でチェックしないと不安だし。
むかーしむかし、理工学部の計算センターでやってたときは 頻繁にアカウント登録があるのにすべてが手動ベースだったのを見兼ねて passwd/shadow(Solaris) ファイルをロックして編集するスクリプトをperlで作り、 それが以後の標準となった。でもそこそこ作るのに時間がかかって、 バグがないかなあとチェックもかなり神経を遣った記憶がある。
で、今はアカウント登録が年に1回のペースなので先述の半自動方式。
ふと、EDITOR=exでええんちゃう? と思ってやってみたら 殆んどワンライナーで重複エントリを潰してから登録するのがでけた。
まず、その回に登録するユーザのレコードを生成するときに、 ついでに user name だけを持った配列(実際にはhash)を作っておく。 その配列を元に、
^(newuser1|newuser2|newuser3|...|newuserN):
というファイルを作る。これを newids というファイルにでも保存。 新規登録するアカウントは newrecord というファイルにでも入ってるとする。 すると、
/usr/bin/printf '%%!egrep -v -f newids r newrecord %%!sort -n -t: -k3 wq\n' | EDITOR=ex vipw
としておけば、2度目3度目続けてやってもOK。前年度分と同じユーザ名 があったら弾く、とかしたいところだが、ユーザ名が登録年度と個人IDで 自動的に決まるようなところではやんなくても十分。