#!/bin/sh rootdir="" user="" groups="" home="" shell="/usr/local/bin/bash" comment="" action="" usage() { echo "Usage: $0 -u user [-h home] [-s shell] [-g groups] [-d rootdir] [-c comment] -a action" echo "Valid actions: present, absent, locked" exit 1 } run() { echo $* $* } OPTIND=1 while getopts d:u:h:g:s:c:a: opt ; do case $opt in d) rootdir="$OPTARG" ;; u) user="$OPTARG" ;; h) home="$OPTARG" ;; g) groups="$OPTARG" ;; s) shell="$OPTARG" ;; c) comment="$OPTARG" ;; a) action="$OPTARG" ;; *) usage ;; esac done shift $(($OPTIND - 1)) if test -z "$user" -o -z "$action"; then usage fi args="" root="" if test -n "$rootdir"; then root="-R $rootdir" fi if test -n "$groups"; then args="-G $groups" fi if test -n "$home"; then args="$args -d $home -k /etc/skel -m -M 700" else args="$args -d /home/$user -k /etc/skel -m -M 700" fi if test -n "$shell"; then args="$args -s $shell" else args="$args -s /usr/local/bin/bash" fi if test -n "$comment"; then args="$args -c $comment" fi case "$action" in present) if pw $root user show "$user" > /dev/null 2>&1; then if pw $root user show "$user" | grep -q LOCKED; then run pw unlock "$user" else echo "$user exists." fi else run pw $root user add "$user" $args fi ;; absent) if pw $root user show "$user" > /dev/null 2>&1; then run pw $root user del "$user" fi ;; locked) if pw $root user show "$user" > /dev/null 2>&1; then if pw $root user show "$user" | grep -q LOCKED; then echo "$user is already locked." else run pw lock "$user" fi fi ;; *) usage ;; esac