: ########################################################################## # Shellscript: waitfor - wait for a user to log in # Version : 0.5 (beta) # Author : Heiner Steven (heiner.steven@odn.de) # Date : 06.02.95 # SCCS-Id. : $Id: waitfor,v 1.1.1.1 1999/06/15 19:29:05 heiner Exp $ ########################################################################## # Changes # 06.02.95 hs Wait until user is logged in n times (0.2) # 24.05.95 hs Use "until" instead of "while" loop (0.3) # 05.12.95 hs Determine number of logins automatically (0.4) # 26.03.96 hs Adjust number of logins to wait for after terminated sessions # (thanks to kannan ) (0.5) ########################################################################## PN=`basename $0` # Program name VER='0.5 (beta)' # Determine mail program knowing "-s" argument Mail=mail [ -x /bin/mailx ] && Mail=mailx : ${LOGNAME:=`whoami`} # User to send mail to SleepTime=10 Usage () { echo "$PN - wait for a user to log in, $VER (stv '95) usage: $PN [-n count] user" >&2 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 <