: ########################################################################## # Title : waitfor - wait for a user to log in # Author : Heiner Steven # Date : 1995-02-06 # Requires : # Category : System Utilities # SCCS-Id. : @(#) waitfor 1.2 03/12/19 ########################################################################## # Description # ########################################################################## PN=`basename "$0"` # Program name VER='1.2' # Determine mail program knowing "-s" argument Mail=mail [ -x /bin/mailx ] && Mail=mailx : ${LOGNAME:=`whoami`} # User to send mail to SleepTime=10 usage () { echo >&2 "$PN - wait for a user to log in, $VER (stv '95) usage: $PN [-n count] user" exit 1 } msg () { echo "$PN:" "$@" >&2 } fatal () { msg "$@"; exit 1; } set -- `getopt n:h "$@"` || usage n=0 # Wait until user is logged in n times while [ $# -gt 0 ] do case "$1" in -n) n="$2" case "$2" in *[!0-9]*) fatal "no positive integer number: $2";; esac shift;; --) shift; break;; -h) usage;; -*) usage;; *) break;; # First file name esac shift done [ $# -eq 1 ] || usage User="$1" # If the number of logins is not given, assume the current # number + 1. if [ ${n:=0} -eq 0 ] then n=`who | awk '$1 == "'$User'"' | wc -l` [ ${n:=0} -gt 0 ] && msg "Note: $User is already logged in" $n "time(s)" Sessions="$n" # Current number of logins n=`expr $n + 1` fi until k=`who | awk '$1 == "'$User'"' | wc -l` [ ${k:=0} -ge $n ] do if [ $k -lt ${Sessions:=0} ] then # Session(s) terminated - adjust number of logins to wait for Sessions=$k n=`expr $k + 1` fi sleep $SleepTime done $Mail -s "$User is logged in at least $n time(s)" $LOGNAME <