Sponsored Content
Top Forums Shell Programming and Scripting Need some help with this script -- extra eyes Post 302188053 by era on Tuesday 22nd of April 2008 02:43:52 PM
Old 04-22-2008
Maybe you could elaborate a bit on where exactly the problem is?

I don't think I have found your actual problem, but I have a number of comments on the code. Maybe a few of these will help also solve your problem, either coincidentally or by simplifying something which got too complex at some point.

Quote:
# This scripts ejects IP tapes from the STK9310 silo via ACSLS Commands from plebsb01.
# Scripter : 1/31/07
#!/bin/ksh
The #!/bin/ksh line needs to be the very first line of the script.
Quote:
EJECT_CAP1()
{
echo "Ejecting to CAP 0,2,1"
# /opt/OMIdtelm/bin/eject_vol -t 3600 -c 0,2,1 -l $EJECTED_TAPES | tee $EJECT_LOG;
echo "Ejecting Completed"
}
EJECT_CAP1()
{
echo "Ejecting to CAP 0,2,2"
# /opt/OMIdtelm/bin/eject_vol -t 3600 -c 0,2,2 -l $EJECTED_TAPES | tee $EJECT_LOG;
echo "Ejecting Completed"
}
This is not very modular. How about a single EJECT function which you'd call with an argument which is either 1 or 2?

Code:
EJECT ()
{
    local cap
    cap=$1
    echo "Ejecting to CAP 0,2,$cap"
    # /opt/OMIdtelm/bin/eject_vol -t 3600 -c 0,2,$cap -l $EJECTED_TAPES | tee $EJECT_LOG;
    echo "Ejecting Completed"
}

So further down in the script you would have EJECT 1 or EJECT 2 (or simply pass whatever number the user supplied, if it's within range -- anyway, you need to adapt the rest of the script, obviously).

Quote:
TOT_TAPE_CT_EJECTED=`cat $EJECT40 | wc -l`
You have this idiom throughout. This is known as Useless Use of Cat. You can just as well say `wc -l <$EJECT40`

Quote:
echo "Select TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)"; read cap_option
echo $cap_option
case $cap_option in
1) EJECT_CAP1 ;;
2) EJECT_CAP2 ;;
*) echo "Invalid Selection - Please Re-enter"
esac
This looks like it's supposed to loop back and ask again if the option was not valid. You could simply "return" from the function at that point in case of invalid input to at least avoid manipulating the log etc when nothing was actually done. Or put this in an endless while true loop and break out of the loop when a valid option was selected.

Code:
echo "Select TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)"
while true; do
    read cap_option
    case $cap_option in
      1 | 2) EJECT $cap_option; break;;
      *) echo "Invalid Selection - Please Re-enter";;
    esac
done

This also incorporates the new modular EJECT function from above. I left out the echo because the user's own input will already be visible on the screen. (I'd take out a few of those sleeps, too.)

Quote:
while read volume until EOF
I suppose this is supposed to be like this, read three space-separated fields into $volume, $until, and $EOF -- or is this pseudo-code?

PS. Please use code tags, especially when posting long programs

Last edited by era; 04-22-2008 at 03:54 PM.. Reason: Code for revamped case statement, too; point out [code] tags
 

7 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

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

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

6. 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

7. 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
All times are GMT -4. The time now is 03:13 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy