ユーザアカウントを一括で登録するスクリプトを作る修行

諸事情により LDAP などは導入できない状況において、複数のホストで同一のアカウントに同一の uid を与えるためのシェルスクリプトを作成。ここにメモしておく。

execflag=0
margin='[test] '
if [ "${1}" = "exec" ] ; then
  execflag=1
  margin='[EXEC] '
fi

group=babies
gid=20000

dir=${0%/*}
list_path=${dir}/${group}_list.txt

if tmp=`grep $group /etc/group` ; then
  echo "${margin}already exist a group named $group"
else
  echo "${margin}groupadd -g $gid $group"
  if [ $execflag = 1 ] ; then groupadd -g $gid $group; fi
fi

IFS=':'
while read uid name comment ; do
  if [ -z "$uid" -o -z "$name" ] ; then
    echo "skip [$uid:$name:$comment]"
  elif id $name 1>/dev/null 2>&1 ; then
    echo "${margin}usermod -c \"$comment\" $name"
    if [ $execflag = 1 ] ; then usermod -c "$comment" $name; fi
  else
    echo "${margin}useradd -u $uid -g $group -c \"$comment\" $name"
    if [ $execflag = 1 ] ; then useradd -u $uid -g $group -c "$comment" $name; fi
  fi
done < ${list_path}

これを nfs で export しておいて、使う方は nfs マウントして

# sh /mnt/util/benriscript.sh exec

と実行する。exec をつけなければ「こんなことやるぞー」というのだけ出してコマンドの実行はしない。そのときは特権ユーザである必要もない。はず。たぶん。
group と gid を外から与えられると便利だが、まあとりあえずいいでしょう。