Hello guys, I was wondering if you could give me some feedback on a shell script I wrote to dump our systems to disk. It works but I would like to know how to make it better and more efficient. Perhaps less lines of shell code if possible. I would like to write better shell scripts so any suggestions would be helpful.
Here is the script.
Code:
#!/usr/bin/bash
#Date: 12-02-08
#Author: tuxtutorials
#Purpose: Dump all file systems to NFS mount for local os backups
global=`hostname | awk -F. '{ print $1}'`
netmnt=backuphost:/export/backup
localmnt=/ufsbackup
date=$(date +%m%d%y%S)
log=/var/adm/backup.log
vol="`df -F nfs | grep "/export/backup"`"
stat=$?
echo "Starting dump on $date" >> $log 2>&1
#Tests to see if ufsbackup dir is created
if [ -d $localmnt ]
then
echo "$localmnt Directory exists" >> $log 2>&1
else
echo "Directory does not exist" >> $log 2>&1
mkdir $localmnt
fi
#Tests to see if netapp vol mounted
if [ $stat != "0" ]
then
echo "$netmnt is not mounted" >> $log 2>&1
echo "$netmnt is being mounted to $localmnt" >> $log 2>&1
mount $netmnt $localmnt
else
echo "$netmnt is already mounted" >> $log 2>&1
fi
if [ -d $localmnt/$global ]
then
echo "NFS $global directory Exists" >> $log 2>&1
echo "Dumping vtoc" >> $log 2>&1
if [ -f /$localmnt/$global/*.vtoc ]
then
echo "vtoc exists" >> /dev/null
else
prtvtoc /dev/dsk/c0t0d0s2 > /$localmnt/$global/$global.$date.vtoc
fi
#
echo "Dumping filesystem" >> $log 2>&1
ufsdump ${1}uf $localmnt/$global/$global.root.$date.ufs${2} / >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.var.$date.ufs${2} /var >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.usr.$date.ufs${2} /usr >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.export.$date.ufs${2} /export >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
echo "Dump Done" >> $log
#
else
echo "Making directory on NFS mount" >> $log 2>&1
mkdir -p $localmnt/$global
echo "Dumping vtoc" >> $log 2>&1
if [ -f /$localmnt/$global/*.vtoc ]
then
echo "vtoc exists" >> /dev/null
else
prtvtoc /dev/dsk/c0t0d0s2 > /$localmnt/$global/$global.$date.vtoc
fi
#
echo "Dumping filesystem" >> $log 2>&1
ufsdump ${1}uf $localmnt/$global/$global.root.$date.ufs${2} / >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.var.$date.ufs${2} /var >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.usr.$date.ufs${2} /usr >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
ufsdump ${1}uf $localmnt/$global/$global.export.$date.ufs${2} /export >> $log 2>&1
echo "Exit status is:$?" >> $log 2>&1
#
echo "Dump Done" >> $log
fi
cd /
umount /ufsbackup
exit
Thanks