![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Recognition of Eyes-free Handwriting Input for Pen and Touch Interfaces | iBot | UNIX and Linux RSS News | 0 | 05-22-2008 10:00 PM |
| Eyes Of Lynx 0.3.0 (Default branch) | iBot | Software Releases - RSS News | 0 | 05-14-2008 07:30 PM |
| exporting number into .csv file in text form (no other extra charc) from shell script | Deepak_Rastogi | Shell Programming and Scripting | 5 | 03-13-2008 04:08 PM |
| Eyes Of Lynx 0.2.0 (Default branch) | iBot | Software Releases - RSS News | 0 | 02-28-2008 04:20 PM |
| manipulating csv to add extra row | neil546 | Shell Programming and Scripting | 3 | 07-16-2007 07:11 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
I have two issues with this script.
1. I cannot seem to get my counters to count correctly. 2. My function to eject to CAP1 or CAP2 is hung in a loop and doens't exit back to the previous function. I would like to be able to select which cap to eject to . Each cap holds only 40 tapes, so when one becomes full, I want to be able to eject to the next. Thanks I'd appreciate some help. # This scripts ejects IP tapes from the STK9310 silo via ACSLS Commands from plebsb01. # Scripter : 1/31/07 #!/bin/ksh #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_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" } #---------------------- EJECT TO CAP FUNCTION ROUTINE --------------------------- # EJECT_TO_CAP() { echo "EJECT_TO_CAP Routine _ List of tapes to be ejected to cap 0,2,1"; cat $EJECT40 TOT_TAPE_CT_EJECTED=`cat $EJECT40 | wc -l` ; echo $TOT_TAPE_CT_EJECTED echo " CURRENT tapes Ejected $TAPE_CT of $TOT_TAPES_TO_EJECT"; sleep 1 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 cat $EJECT40 >> TAPES_EJECTED.log cat /dev/null >$EJECT40 sleep 5 } #------------------------------------------- MAIN ROUTINE #------------------------------------------ TAPE_ROUTINE () { while read volume until EOF 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 of $TOT_TAPES_TO_EJECT Tapes Ejected CAP is FULL"; EJECT_TO_CAP TAPE_CT=0 fi TAPE_CT=`expr $TAPE_CT + 1` done < $EJECTED_TAPES EJECT_TO_CAP TOT_TAPE_CT_EJECTED=`expr $TAPE_CT + $TOT_TAPES_TO_EJECT` 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=`cat $EJECTED_TAPES |wc -l` 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 exit 0 |
|
|||||
|
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:
Quote:
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"
}
Quote:
Quote:
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
Quote:
PS. Please use code tags, especially when posting long programs Last edited by era; 04-22-2008 at 02:54 PM.. Reason: Code for revamped case statement, too; point out [code] tags |
|
||||
|
Still not functioning properly.
It seems as though my "EJECT_TO_CAP" routine will not read my input, but just continously loops with my $volume variable. Not sure where it is picking up the input from. I guess I've been working on this script too long. lol... Any other ideas!!
![]() 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() { cap=$1 echo "Ejecting to CAP 0,2,$cap"; cat $EJECT40 TOT_TAPE_CT_EJECTED=`cat $EJECT40 | wc -l` ; echo $TOT_TAPE_CT_EJECTED echo " CURRENT tapes Ejected $TAPE_CT of $TOT_TAPES_TO_EJECT"; sleep 1 # /opt/OMIdtelm/bin/eject_vol -t 3600 -c 0,2,1 -l $EJECTED_TAPES | tee $EJECT_LOG; echo "Ejecting Completed" cat $EJECT40 >> TAPES_EJECTED.log cat /dev/null >$EJECT40 } #---------------- 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 TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2)" while true; do read cap case $cap in 1 | 2) EJECT ; break;; *) echo "Invalid Selection";; esac done } #------------ MAIN ROUTINE # Reads file for number of tapes to eject, when reads 40 volumes, it ejects tapes and continue till EOF ------ TAPE_ROUTINE () { while read volume until EOF 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 of $TOT_TAPES_TO_EJECT Tapes Ejected CAP is FULL"; EJECT_TO_CAP TAPE_CT=0 fi TAPE_CT=`expr $TAPE_CT + 1` done < $EJECTED_TAPES EJECT_TO_CAP TOT_TAPE_CT_EJECTED=`expr $TAPE_CT + $TOT_TAPES_TO_EJECT` 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=`cat $EJECTED_TAPES |wc -l` 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 |
|
||||
|
You're not passing the argument like EJECT $cap but that's again probably not the main problem.
Can you add debug prints to see what it's doing and what the variables' values are? |
|
||||
|
Still not functioning properly - Am I confused or what.
![]() This is the output that I am getting: When my TAPE_CT = 40 it goes to EJECT_TO_CAP, but never allows me to input my parameter and continues loops picking up the name of each $volume. Any idea's? + EJECT_TO_CAP + echo Select TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2) Select TAPE CAP TO Eject to: Enter 1 for CAP1 or 2 for CAP2 (1,2) + true + read cap + echo TPA010 TPA010 + echo Invalid Selection Invalid Selection + true + read cap + echo TPA011 TPA011 + echo Invalid Selection Invalid Selection + true + read cap + echo TPA023 |
| Sponsored Links | ||
|
|
![]() |
| Bookmarks |
| Tags |
| unix commands |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|