Loginchecker

Aus Linupedia
Wechseln zu: Navigation, Suche

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