#!/bin/sh # # ver. 1.0 # # process last output ( calculate sum of time ) # written by Shuhei Ohkado # # needs NIS: # If you are not in NIS environment, change 'ypcat passwd' to 'cat /etc/passwd' # lastnum=10; usage() { echo "Usage: $0 -num "; exit; } go_out=0; while [ "X$*" != "X" -a $go_out -eq 0 ]; do case $1 in -n*) lastnum=$2; shift 2;; -h*) usage; exit;; -a*) lastnum=-1; shift 1; go_out=1;; -*) echo "unknoow option $1"; exit;; *) go_out=1; esac done if [ "X$*" != "X" ]; then lastnum=$1 fi if [ $lastnum -lt 0 ]; then lastcom="last"; else lastcom="last -$lastnum"; fi active_user() { ypcat passwd | awk -F: '{print $1,$2}' | \ while read user pass do if [ '\*' != \\$pass ]; then echo "$user \c" fi done } ulist=`active_user | tr - _`; for u in $ulist do us=`echo $u|tr - _` eval "T${us}=0" done for u in $ulist do eval "T${u}=0" done eval $lastcom | awk -F' ' '{print $1, $NF}' | \ { while read user time do user=`echo ${user} | tr - _` if [ "X$user" = "Xreboot" -o "X$user" = "Xwtmp" -o "X$user" = "X" ]; then continue; fi if [ "X$time" = "Xin" ]; then echo "$user is still logged in" continue; fi eval `echo $time | \ sed -e\ 's/(\(\([0-9]*\)+\)*\([0-9][0-9]\):\([0-9][0-9]\))/\day=\2;hour=\3;min=\4;/'` if [ "X$day" = "X" ]; then day=0; fi eval 'o=`expr $day \* 24`;o=`expr $o + $hour`;o=`expr $o \* 60`;tot=`expr $o + $min`' eval "T$user=\`expr \$T$user + $tot\`" done for u in $ulist do tot=`eval "echo \\$T$u"` if [ $tot -ne 0 ]; then echo "$u = $tot" fi done | sort +2 -n } exit