The UNIX and Linux Forums  


Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #1 (permalink)  
Old 03-17-2008
rsullivan rsullivan is offline
Registered User
  
 

Join Date: Mar 2008
Posts: 1
sh loop Need some help

Hi,

I have the following script that does a backup via cpio to an NFS mount. The problem is that I only seem to be getting root. I'm not sure what I'm doing wrong here but it is not working. Following is the entire script. I've highlighted the areas where I think I have a problem or are at least relevant, I think.

#!/bin/sh
#
# Set configuration variables
#
NFSMOUNT='/mnt/nfs'
BACKUP_LOG='/usr/local/backup_logs'
EXCLUDE_FS='/mnt/nfs'
HARDWARE_LOG='/var/adm/messages'

export NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG

# Get date in MMDDYY format
MDY=`date +%m%d%y`

if [ ! -d ${BACKUP_LOG} -o ! -w ${BACKUP_LOG} ]; then
echo "${BACKUP_LOG} doesn't exist or isn't writable"
exit 1
fi

echo "### Backup starting at `date`"
# LOG_START is the number of lines in our hardware log
# when the backup began. We're not concerned with anything
# that occurred before now.
LOG_START=`wc -l < ${HARDWARE_LOG}`
# Strip leading and trailing spaces

LOG_START=`expr ${LOG_START}`

BACKUPTYPE="cpio"

# Get list of unix file systems to back up
MOUNTEDSYSTEMS=`df -F ufs | cut -d' ' -f1 | sort`

# Remove excluded file systems from list
for FS in $MOUNTEDSYSTEMS
do
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
# Add entry to list
*) case "${FILESYSTEMS}" in
# List is empty so this is the first entry
'') FILESYSTEMS="${FS}";;
# List contains entries so append to list
*) FILESYSTEMS="${FILESYSTEMS} ${FS}";;
esac;;
esac
done

cd /
if [ "$BACKUPTYPE" = "dump" ]; then
# Backup using dump
for FS in ${FILESYSTEMS}
do
echo "Dumping ${FS} ${NFSMOUNT}" | \
tee -a ${BACKUP_LOG}/bu.ufsdump.${MDY}
/usr/sbin/ufsdump 0fu ${NFSMOUNT} ${FS} 2>&1 | \
# we're only concerned with the last two lines of output
#to determine if this was a successful dump
tee -a ${BACKUP_LOG}/bu.ufsdump.${MDY} | tail -3

# Count dump of file system
FS_COUNT=`expr ${FS_COUNT} + 1`
done
else

#Backup using cpio
for FS in ${FILESYSTEMS}
do
echo "Writing cpio archive of ${FS} to ${NFSMOUNT}" |\
tee -a ${BACKUP_LOG}/bu.cpio.${MDY}.err \
>> ${BACKUP_LOG}/bu.cpio.${MDY}

# The output of find will always be relative to root
find .${FS} -print -xdev | \

# Use sed to change "./" back to "/" so Solaris cpio won't bark
sed -e 's/^\.\/$/\//' | \
cpio -oc -O ${NFSMOUNT}/`hostname`.${MDY} \
2>> ${BACKUP_LOG}/bu.cpio.${MDY}.err \
1>> ${BACKUP_LOG}/bu.cpio.${MDY}

# count cpio archive of file system
FS_COUNT=`expr ${FS_COUNT} + 1`
done

cat ${BACKUP_LOG}/bu.cpio.${MDY}.err
fi

# Display filesystem information that was just backed up
echo "### Currently mounted file systems:"
df -k ${FILESYSTEMS}
echo "###"

LOG_END=`wc -l < ${HARDWARE_LOG}`
# strip leading and trailing spaces
LOG_END=`expr ${LOG_END}`
if [ "${LOG_BEGIN}" -ne "${LOG_END}" ]; then
# Report errors in log during backup
# add additional grep lines to remove normal messages appearing in your
# system logging script
echo "### System logs generated during backup:"
cat ${HARDWARE_LOG} | \
sed -e "1,${LOG_START}d" | \
grep -v "connect from " | \
grep v "refused connection from " | \
nawk '{ print substr($0,1,78) }; \
length > 78 { print " " substr ($0,79) }'

echo "###"
fi
# Remove old log files
if [ "${BACKUPTYPE}" = "cpio" ]; then
cd ${BACKUP_LOG}
find . -mtime +14 -follow -exec rm {} \;
ls -lt ${BACKUP_LOG}/*
echo
fi

echo "Backup Finished at " `date`