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...)
 
K (Kategorie)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 7: Zeile 7:
 
Das Script gibt dann die Loginzeit in Minuten aus.
 
Das Script gibt dann die Loginzeit in Minuten aus.
 
Hier das Script:
 
Hier das Script:
 
+
<pre>
 
   #! /bin/bash
 
   #! /bin/bash
  
Zeile 60: Zeile 60:
  
 
   echo $(($OVERALLTIME + $TODAYTIME));
 
   echo $(($OVERALLTIME + $TODAYTIME));
 +
</pre>
 +
 +
 +
-----
 +
[[Category:Konsole]]
 +
[[Category:Scripte]]

Aktuelle Version vom 30. Oktober 2008, 20:34 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));