#!/bin/bash
##############################################################
#File: autosmb
#Date: 08/08/21
#Author: Neil Wang
#
#Description:
# Automic mount/umount Shared Directory from Windows
# accroding to config file[~/.mountdir].
# Frequence: check once every 10 minutes
##############################################################
# TimeEcho string with time str
function TimeEcho
{
timestr=`date +"%F %T"`
echo "[$timestr] $1"
}
# check dir if it's a bad smbmount dir, bad then smbumount it
function CheckSmbDir
{
dir=$1
TimeEcho "CheckSmbDir:[$dir]"
ls $dir > /dev/null
if [ $? -ne 0 ];then
TimeEcho "Found a bad smbdir [$dir]!" >&2
smbumount $dir
fi
}
TimeEcho "########################################"
TimeEcho "# Auto Smb Mount/Unmount Tool V1.00 #"
TimeEcho "# RunTime: `date +'%F %T'` #"
TimeEcho "########################################"
# main loop
while :
do
for userdir in `ls -p /home|grep /$`
do
user=${userdir%/}
pushd /home/$userdir &> /dev/null
[ $? -ne 0 ] && continue; # have not permission
[ ! -f .mountdir ] && continue;
TimeEcho "@@@Processing dir[$userdir]...@@@"
eval `cat .mountdir`
# check smb dir and auto umount bad dirs
for mntdir in $DIRLIST
do
CheckSmbDir $mntdir
done
# check win host is alive
ping -c 1 -W 1 $WINIP > /dev/null
if [ $? -ne 0 ]; then
continue;
else
for mntdir in $DIRLIST
do
[ ! -d $mntdir ] && mkdir $mntdir; # build dir if it not exist
# check dir if already mounted
if [ "`mount|grep -w "/home/$userdir$mntdir"|grep -v grep`" != "" ];then
TimeEcho "Dir[$mntdir] already mounted."
continue;
fi
TimeEcho "Smb mount dir[$mntdir]..."
smbmount //$WINIP/$mntdir $mntdir \
-o username=$USERNAME,password=$PASSWORD,rw,uid=`id -u $user`,gid=`id -g $user`
done
fi
popd > /dev/null
done
sleep 600 # check once every 10 minutes
done
|