World's most popular travel blog for travel bloggers.

Write a shell script to take username as an argument and check whether s/he has logged in or not for every 30 seconcs for 5 minutes.

, , No Comments
#!/bin/bash
# isuserloggedin.sh
# Usage: isuserloggedin.sh username
# Shell script which checks after every one minute whether a user has logged in
# or not
# You can also run script in background using & then foreground it to view result

if [ $# -ne 1 ]
then
   echo "You supplied wrong arguments"
   echo "usage : `basename $0` username"
exit 1
fi

isuserexist()
{
grep -w "$1" /etc/passwd > /dev/null

if [ $? -eq 1 ]
then
   echo "$1 is not a valid user"
exit 1
fi
}

isuserexist $1
time=0
while true
do
#  you can replace following two statements with
#   if `who|grep $1 > /dev/null`
who|grep $1 > /dev/null
if [ $? -eq 0 ]
then
  echo "User $1 is logged in "
  if [ $time -gt 60 ]
  then
     hours=$((time/60))
     minutes=$((time%60))
     echo "He is logged in $hours hour(s) $minutes minute(s) late"
  else
     echo "He is logged in $time minute(s) late"
  fi
exit 0

else
let time++

# You can use following formats also
#   time=`expr $time + 1 `
#  time=$((time+1))

sleep 60
fi
done

Output:
[root@localhost shell]# sh isuserloggedin.sh
you have suplied wrong arguments
usage : isuserloggedin.sh username
[root@localhost shell]# sh isuserloggedin.sh root
User root is logged in
He is logged in 0 minute(s) late
[root@localhost shell]# sh isuserloggedin.sh roott
roott is not a valid user
Run script in background
[root@localhost shell]# sh isuserloggedin.sh venu &
[1] 15917
[root@localhost shell]# User venu is logged in
He is logged in 3 minute(s) late

[1]+ Done sh isuserloggedin.sh venu
Run script in background then foreground it
[root@localhost shell]# sh isuserloggedin.sh venu &
[1] 16223
[root@localhost shell]# fg
sh isuserloggedin.sh venu
User venu is logged in
He is logged in 1 minute(s) late
[root@localhost shell]#

0 comments:

Post a Comment

Let us know your responses and feedback