Need some help with this script -- extra eyes


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need some help with this script -- extra eyes
# 8  
Old 04-22-2008
The while loop which is reading input from $EJECTED_TAPES is redirected as the input. I looked at that once already and concluded that that's not the problem, but of course, it is. You need to break the redirection temporarily. Maybe add redirect from </dev/tty where you want to read from the terminal.

Last edited by era; 04-22-2008 at 06:51 PM.. Reason: My first analysis was wrong; this is v2
# 9  
Old 04-22-2008
Yea. You are right, but I am not sure how to re-direct it and which while statement.


Quote:
Originally Posted by era
The while loop which is reading input from $EJECTED_TAPES is redirected as the input. I looked at that once already and concluded that that's not the problem, but of course, it is. You need to break the redirection temporarily. Maybe add redirect from </dev/tty where you want to read from the terminal.

Last edited by gzs553; 04-22-2008 at 07:23 PM.. Reason: updating information.
# 10  
Old 04-22-2008
Try replacing this part.

Code:
EJECT_TO_CAP()
{
    #echo "EJECT_TO_CAP Routine _ List of tapes to be ejected to cap 0,2,1"; cat $EJECT40

    echo "Select TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)"
    while true; do
        read cap </dev/tty
        case $cap in
          1 | 2) EJECT $cap; break;;
          *) echo "Invalid Selection, try again";;
        esac
    done
}

# 11  
Old 04-23-2008
Finally working...Thanks for your help.

ERA...finally working...thank-you for your help.
Now I can continue to expand the script and clean it up.
Great job...I appreciate your efforts....Smilie
# 12  
Old 04-23-2008
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.)
# 13  
Old 04-23-2008
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:
Originally Posted by era
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.)
# 14  
Old 04-23-2008
The call tree is very hard to follow (and you're not using code tags, sigh ...), what with global variables being clobbered left and right inside various functions. I'm not sure I understand exactly what the problem is, but it looks like TAPE_CT doesn't have the value you want, is that it? Put a print on every statement which modifies it to see where it's getting zapped.

Longer term, plan to decide which function is responsible for maintaining which variable, and try not to touch it from other functions (except possibly for printing). Ideally, pass things as parameters between the functions, to make the dependencies explicit.
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Script when scheduled in Crontab gives extra records in output

Hi, We have created a script that's checks the latency of IIDR subscription by fetching details from a config file (that contains subscription details) and running the CHCCLP command. The out put is then concatenated in a csv file. Once all subscription details are saved the script send a mail... (7 Replies)
Discussion started by: ab095
7 Replies

2. Shell Programming and Scripting

Would appreciate a quick second set of eyes on a script (regarding doing things in the background)

What I'm trying to do is leave a tcpdump running all the time on a server, and at the end of every day kill it and start a new one. For some reason my boss doesn't want to set this up as a cron job, so I've come up with the following.: #!/bin/bash PCAPFILE=/tmp/mgmt.$(date... (8 Replies)
Discussion started by: DeCoTwc
8 Replies

3. Shell Programming and Scripting

The same script with extra variables seems to fail

Hey everyone, I have a problem with a certain shellscript. I have a script like this: #!/bin/sh template=$1 for values in {60,150,240,330}\ {60,150,240,330}\ {60,150,240,330}\ {60,150,240,330}; do set $values X=$1; Y=$2; Z=$3; M=$4 mkdir "X$X-Y$Y-Z$Z-M$M" cp... (2 Replies)
Discussion started by: mario8eren
2 Replies

4. Shell Programming and Scripting

Broke Perl Script Second pair of eyes NET::FTPSSL

Hi all, Let me first start out by saying I'm a perl newbie and hope somebody can help, for the life of me I can't figure out why my script will not find and download a remote file via FTPSSL. What it's supposed to do is find the latest file named... (4 Replies)
Discussion started by: Styles
4 Replies

5. Shell Programming and Scripting

Extra output in the script

Hi , I am trying to execute the following script. #!/bin/sh find . -name "common.log.diff" if ; then cp common.log common.log.diff diff common.log common.log.diff > DIFFERENCE.log cp common.log common.log.diff grep "ERROR" DIFFERENCE.log if ; then echo "1" else echo "0" fi... (5 Replies)
Discussion started by: himvat
5 Replies

6. Programming

Another set of eyes

Original code used fwrite instead of putc. What is expected is that the destination file will be written to. Instead I end up with a zero length file. I'm sure there is something simple I'm missing. tia. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char... (6 Replies)
Discussion started by: ramen_noodle
6 Replies

7. What is on Your Mind?

use ears to protect eyes before the computer.

If you listen to the files on the computer with ears, your eyes are protected. Microsoft Text-To-Speech(TTS) voice engine has been installed by default on Windows 2000, XP, Vista, you can find what voice engines have been installed on the computer by following Control Panel->Speech->Speech... (0 Replies)
Discussion started by: tgst
0 Replies
Login or Register to Ask a Question