ERA,
Now my EOF counters are not working. Seems like I lose them in my EJECT routine.
Script:
#set -x
rpt=/export/home/legato/tapemgr/rpts/offsite
dat=`date +"%m%d%y"`
rdat=`date +"%b%d%y_%H%M%S"`
EJECTED_TAPES="$rpt/ejected/eject_tapes_test.041608"
OFFSITE_RPT="$rpt/Offsite.rpt.041608"
EJECT_LOG=$rpt/ejected/ejected_tape.status.log.041608
TOT_TAPE_CT_EJECTED=0
TAPE_CT=0
CAP_TOTAL=40
EJECT40=ejectupto40.log
cat /dev/null > $EJECT040
#--------------------------------------
# L O C A L F U N C T I O N S . . .
#--------------------------------------
EJECT()
{
echo "In EJECT ROUTINE $TAPE_CT"
TOT_TAPE_CT_EJECTED=`expr $TAPE_CT + $TOT_TAPE_CT_EJECTED`
TAPES_EJECTED=`wc -l < $EJECT40` ; echo "$TAPES_EJECTED in file"
echo "Ejecting $TAPE_CT tapes to CAP 0,2,$cap"
# /opt/OMIdtelm/bin/eject_vol -t 3600 -c 0,2,1 -l $EJECTED_TAPES | tee $EJECT_LOG;
echo "$TAPE_CT tapes ejected to CAP $cap Completed ..... Please remove tapes from cap"
cat $EJECT40 >> TAPES_EJECTED.log
cat /dev/null >$EJECT40
echo "Total tapes ejected - $TOT_TAPE_CT_EJECTED of $TOT_TAPES_TO_EJECT"
TAPE_CT=0
}
#---------------- SELECT CAP to EJECT ---------------------------
#
EJECT_TO_CAP()
{
#echo "EJECT_TO_CAP Routine _ List of tapes to be ejected to cap 0,2,1"; cat $EJECT40
echo "Select CAP 0,2,x Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)"
while true; do
read cap < /dev/tty
echo $cap
case $cap in
1 | 2) EJECT $cap ; break;;
*) echo "Invalid Selection";;
esac
done
}
#------------ TAPE PROCESSING FUNCTION
# Reads file for number of tapes to eject, when reads 40 volumes, it ejects tapes and continue till EOF ------
TAPE_ROUTINE ()
{
while read volume
do
TAPE_CT=`expr $TAPE_CT + 1`
echo " In tape routine volume ejected $volume TAPE $TAPE_CT of $TOT_TAPES_TO_EJECT"
if [ $TAPE_CT != $CAP_TOTAL ]
then
echo $volume >> $EJECT40
else
echo $volume >> $EJECT40
echo "$TAPE_CT Tapes to be Ejected -- CAP is FULL";
EJECT_TO_CAP
fi
done < $EJECTED_TAPES
echo "EOF $TAPE_CT"
EJECT_TO_CAP
echo " END of Tape Routine .. Total Tapes Ejected >>> $TOT_TAPES_TO_EJECT of $TOT_TAPE_CT_EJECTED"
echo "Total tapes ejected: $TOT_TAPE_CT_EJECTED" >> TAPES_EJECTED.log
mv TAPES_EJECTED.log TOT_TAPES_EJECTED.rpt.$rdat
}
#--------------------------------------
# M A I N . . .
#--------------------------------------
cat $EJECTED_TAPES
TOT_TAPES_TO_EJECT=`wc -l < $EJECTED_TAPES`
echo "Total Tapes to eject is: $TOT_TAPES_TO_EJECT ";
echo " Is this the correct list of tapes to eject (y/n)?"
read option
case $option in
y|Y) TAPE_ROUTINE;;
n|N) exit
esac
output:
1
In EJECT ROUTINE 40
40 in file
Ejecting 40 tapes to CAP 0,2,1
40 tapes ejected to CAP 1 Completed ..... Please remove tapes from cap
Total tapes ejected - 160 of 176
In tape routine volume ejected IP0768 TAPE 1 of 176
In tape routine volume ejected IP0769 TAPE 2 of 176
In tape routine volume ejected IP0770 TAPE 3 of 176
In tape routine volume ejected IP0771 TAPE 4 of 176
In tape routine volume ejected IP0772 TAPE 5 of 176
In tape routine volume ejected IP0773 TAPE 6 of 176
In tape routine volume ejected IP0774 TAPE 7 of 176
In tape routine volume ejected IP0775 TAPE 8 of 176
In tape routine volume ejected IP0776 TAPE 9 of 176
In tape routine volume ejected IP0777 TAPE 10 of 176
In tape routine volume ejected IP0778 TAPE 11 of 176
In tape routine volume ejected TPA005 TAPE 12 of 176
In tape routine volume ejected TPA006 TAPE 13 of 176
In tape routine volume ejected TPA010 TAPE 14 of 176
In tape routine volume ejected TPA011 TAPE 15 of 176
In tape routine volume ejected TPA023 TAPE 16 of 176
EOF 0
Select CAP 0,2,x Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)
1
1
In EJECT ROUTINE 0
16 in file
Ejecting 0 tapes to CAP 0,2,1
0 tapes ejected to CAP 1 Completed ..... Please remove tapes from cap
Total tapes ejected - 0 of 176
END of Tape Routine .. Total Tapes Ejected >>> 176 of 0
Quote:
Actually it might be better to solve it in a slightly different way. See if you can extrapolate from this other thread:
https://www.unix.com/shell-programmin...y-scripts.html
Mainly, if you (or your successor) ever want to run this from within another script, it sucks that it reads from the tty. (Those sleeps suck then, too.)