mirror of https://github.com/tLDP/LDP
88 lines
2.3 KiB
Bash
88 lines
2.3 KiB
Bash
#!/bin/bash
|
|
# logon.sh: A quick 'n dirty script to check whether you are on-line yet.
|
|
|
|
umask 177 # Make sure temp files are not world readable.
|
|
|
|
|
|
TRUE=1
|
|
LOGFILE=/var/log/messages
|
|
# Note that $LOGFILE must be readable
|
|
#+ (as root, chmod 644 /var/log/messages).
|
|
TEMPFILE=temp.$$
|
|
# Create a "unique" temp file name, using process id of the script.
|
|
# Using 'mktemp' is an alternative.
|
|
# For example:
|
|
# TEMPFILE=`mktemp temp.XXXXXX`
|
|
KEYWORD=address
|
|
# At logon, the line "remote IP address xxx.xxx.xxx.xxx"
|
|
# appended to /var/log/messages.
|
|
ONLINE=22
|
|
USER_INTERRUPT=13
|
|
CHECK_LINES=100
|
|
# How many lines in log file to check.
|
|
|
|
trap 'rm -f $TEMPFILE; exit $USER_INTERRUPT' TERM INT
|
|
# Cleans up the temp file if script interrupted by control-c.
|
|
|
|
echo
|
|
|
|
while [ $TRUE ] #Endless loop.
|
|
do
|
|
tail -n $CHECK_LINES $LOGFILE> $TEMPFILE
|
|
# Saves last 100 lines of system log file as temp file.
|
|
# Necessary, since newer kernels generate many log messages at log on.
|
|
search=`grep $KEYWORD $TEMPFILE`
|
|
# Checks for presence of the "IP address" phrase,
|
|
#+ indicating a successful logon.
|
|
|
|
if [ ! -z "$search" ] # Quotes necessary because of possible spaces.
|
|
then
|
|
echo "On-line"
|
|
rm -f $TEMPFILE # Clean up temp file.
|
|
exit $ONLINE
|
|
else
|
|
echo -n "." # The -n option to echo suppresses newline,
|
|
#+ so you get continuous rows of dots.
|
|
fi
|
|
|
|
sleep 1
|
|
done
|
|
|
|
|
|
# Note: if you change the KEYWORD variable to "Exit",
|
|
#+ this script can be used while on-line
|
|
#+ to check for an unexpected logoff.
|
|
|
|
# Exercise: Change the script, per the above note,
|
|
# and prettify it.
|
|
|
|
exit 0
|
|
|
|
|
|
# Nick Drage suggests an alternate method:
|
|
|
|
while true
|
|
do ifconfig ppp0 | grep UP 1> /dev/null && echo "connected" && exit 0
|
|
echo -n "." # Prints dots (.....) until connected.
|
|
sleep 2
|
|
done
|
|
|
|
# Problem: Hitting Control-C to terminate this process may be insufficient.
|
|
#+ (Dots may keep on echoing.)
|
|
# Exercise: Fix this.
|
|
|
|
|
|
|
|
# Stephane Chazelas has yet another alternative:
|
|
|
|
CHECK_INTERVAL=1
|
|
|
|
while ! tail -n 1 "$LOGFILE" | grep -q "$KEYWORD"
|
|
do echo -n .
|
|
sleep $CHECK_INTERVAL
|
|
done
|
|
echo "On-line"
|
|
|
|
# Exercise: Discuss the relative strengths and weaknesses
|
|
# of each of these various approaches.
|