#!/bin/bash

res_showmount=""
res_ping=0
res_mtab=""

### LESE JEDE ZEILE IN FSTAB
while read zeile ; do
	ip=`expr match "$zeile" "\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)"`
	dv=`echo $zeile | cut -d \  -f 1`
	mp=`echo $zeile | cut -d \  -f 2`
	fs=`echo $zeile | cut -d \  -f 3`
	op=`echo $zeile | cut -d \  -f 4`

	### NETZLAUFWERK?
	if test "$ip" != "" ; then
		echo "--------------------------------------------------------------------------"
		echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Netzlaufwerk gefunden: $ip"

		### SCHON GETESTET AUF PING/SHOWMOUNT?
		if test "$lastip" != "$ip" ; then
			echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $ip ungetestet."

			### SHOWMOUNT RESET
			res_showmount=''

			### PING
			echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : teste ping $ip ..."
			/bin/ping -q -c1 -w5 $ip > /dev/null
			let res_ping=$?
			### PING?
			if [ "$res_ping" -eq "0" ]; then
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Rechner $ip erreichbar"

				### SHOWMOUNT
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : teste showmount $ip ..."

				res_showmount=`showmount -e $ip`
				### SHOWMOUNT?
				if [ "$res_showmount" != "" ]; then
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $ip hat folgende Freigaben:"
					echo "$res_showmount"
				else
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $ip hat KEINE NFS-Freigaben"
				fi
			else
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Rechner $ip NICHT erreichbar"
			fi

		### SCHON GETESTET
		else
			echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $ip bereits getestet."
		fi

		### WAS SAGT MTAB?
		echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : suche nach $dv in /etc/mtab ..."
		res_mtab=`cat /etc/mtab | grep $dv`

		### GEMOUNTET
		if test "$res_mtab"; then

			### ERREICHBAR
			if [ "$res_showmount" != "" ]; then
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $dv eingebunden und erreichbar, keine Aktion nötig."

			### NICHT ERREICHBAR
			else
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $dv eingebunden und NICHT erreichbar, versuche umount ..."

				### UMOUNT
				umount -l -f $mp > /dev/null
				if test "`cat /etc/mtab | grep $dv`" ; then
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Aushängen NICHT erfolgreich! Eintrag in /etc/mtab nach wie vor vorhanden!"
				else
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Aushängen erfolgreich!"
				fi
			fi

		### NICHT GEMOUNTED
		else

			### ERREICHBAR
			if [ "$res_showmount" != "" ]; then
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $dv erreichbar, aber nicht eingebunden. Versuche mount ..."

				### MOUNT
				mount -o $op -t $fs $dv $mp #> /dev/null
				if test "`cat /etc/mtab | grep $dv`" ; then
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Einhängen erfolgreich!"
				else
					echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : Einhängen NICHT erfolgreich! Eintrag in /etc/mtab fehlt nach wie vor!"
				fi

			### NICHT ERREICHBAR
			else
				echo "("`date +"%d.%m.%Y-%H:%M:%S"`") : $dv nicht eingebunden und nicht erreichbar, keine Aktion nötig."
			fi

		fi
	fi
	lastip=$ip
done < /etc/fstab
exit 0

