Loginchecker: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: 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 ein...)
(kein Unterschied)

Version vom 28. März 2008, 23:53 Uhr

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));