Loginchecker
Version vom 29. März 2008, 00:46 Uhr von Framp (Diskussion | Beiträge)
Das folgende kleine Script ermittelt wie lange ein Benutzer am heutigen Tag angemeldet war. Es überprüft dabei die vergangen Logins sowie die aktuelle Uptime für einen bestimmten Benutzer. Das Script erwartet als Parameter zuerst den zu prüfenden Benutzernamen, dann die Loginkonsole. Bei einem System ist das üblicherweise tty7. Um zu testen wie lange der Benutzer "nbkr" heute angemeldet war, gibt man einfach ein:
./loginchecker.sh nbkr tty7
Das Script gibt dann die Loginzeit in Minuten aus. Hier das Script:
#! /bin/bash #Setting some variables MYUSER=$1 TTY=$2 ######################################## DO NOT CHANGE ANYTHING BELOW ################################################################## # Getting the login values of the user of this month OVERALLTIME=0 for i in `last | grep -v still | grep ^$MYUSER | grep $TTY | sed 's/ //g' | grep "\`LANG=en_US date '+%b %d'\`" | cut -d ' ' -f 7 | sed 's/.*(//g' | grep -v - | sed 's/)//g'`; do #Getting the minutes and transforming them to decimal values MINUTES=${i#???} MINUTES=`echo $MINUTES | sed 's/^0//g' ` #Getting the hours and transforming the to decimal values TMP=${i#??} HOURS=${i%$TMP} HOURS=`echo $HOURS | sed 's/^0//g' ` let "TMPTIME=$HOURS*60 + $MINUTES" let "OVERALLTIME=$OVERALLTIME + $TMPTIME" done # Calculating the current uptime UPTIME=`last | grep still | grep ^$MYUSER | grep $TTY | sed 's/ //g' | cut -d ' ' -f 7 | sed 's/.*(//g' | grep -v - | sed 's/)//g'` UMINUTES=${UPTIME#???} UMINUTES=`echo $UMINUTES | sed 's/^0//g' ` TMP=${UPTIME#??} UHOURS=${UPTIME%$TMP} UHOURS=`echo $UHOURS | sed 's/^0//g' ` let "UPHOURS=` date +%H` - $UHOURS" # Now we have to check if uphours is negative. # This happens when a user logs in before midnight and is still # online after midnight. If so we have to add the (negative) value # to 24 * 60 to get the correct time. if [[ $UPHOURS -lt 0 ]]; then let "UPHOURS=24 * 60 + $UPHOURS" fi TMP=`date +%M` TMP2=`echo $TMP | sed 's/^0//g'` let "UPMINUTES=$UMINUTES - $TMP2" let "TODAYTIME=$UPHOURS*60 - $UPMINUTES" echo $(($OVERALLTIME + $TODAYTIME));