Angela_Wilcox
asked on
AIX - Proper format for a While...Read...Do Loop
I am NEW to unix programming - and having to do alot of it - so I am pirating code for the most part. I am stuck right now because I have a text file with records that I am reading to set variables - After I read these and initialize the variables, I am executing a function based on these variables. The issue I am having is that it keeps running record 1 of my file over and over and does move on to the next record of the file (two currently). The funky stuff you may not recognize in the function is MaxL code to run an Essbase Replication...
Any help is GREATLY appreciated!
This is a ksh script - the file looks as such:
M3EMGP1 M3EMGP1 M3EMGP2 M3EMGP2 Actual Jan_PY1 Feb_PY1 Mar_PY1
M3EMGP3 M3EMGP3 M3EMGP2 M3EMGP2 Actual Jan_PY1 Feb_PY1 Mar_PY1 Apr_PY1 May_PY1 Jun_PY1
And the applicable code looks as such:
-------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -----
while read TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 junk<
/db2olap/scripts/angietest /CreateRep licationCy cle1.txt
do
#not sure this is needed twice - added it to try and solve my issue
read TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 < /db2olap/scripts/angietest /CreateRep licationCy cle1.txt
## Map the Parms
TGAPP=$TGAPP
TGDB=$TGDB
SRCAPP=$SRCAPP
SRCDB=$SRCDB
CAT=$CAT
M1=$M1
M2=$M2
M3=$M3
M4=$M4
M5=$M5
M6=$M6
M7=$M7
M8=$M8
M9=$M9
M10=$M10
M11=$M11
PERIODS=$PERIODS
## echo to the logfile to verify they were set correctly
echo "Variables and Parm Settings" >> "$LOGFILE" 2>&1
echo "TGAPP =" $TGAPP >> "$LOGFILE" 2>&1
echo "TGDB =" $TGDB >> "$LOGFILE" 2>&1
echo "SRCAPP =" $SRCAPP >> "$LOGFILE" 2>&1
echo "SRCDB = " $SRCDB >> "$LOGFILE" 2>&1
echo "CAT =" $CAT >> "$LOGFILE" 2>&1
echo "M1 = " $M1 >> "$LOGFILE" 2>&1
echo "M2 = " $M2 >> "$LOGFILE" 2>&1
echo "M3 = " $M3 >> "$LOGFILE" 2>&1
echo "M4 = " $M4 >> "$LOGFILE" 2>&1
echo "M5 = " $M5 >> "$LOGFILE" 2>&1
echo "M6 = " $M6 >> "$LOGFILE" 2>&1
echo "M7 = " $M7 >> "$LOGFILE" 2>&1
echo "M8 = " $M8 >> "$LOGFILE" 2>&1
echo "M9 = " $M9 >> "$LOGFILE" 2>&1
echo "M10 = " $M10 >> "$LOGFILE" 2>&1
echo "M11 = " $M11 >> "$LOGFILE" 2>&1
##Create Month variable string
if [ "$M11" != '' ]; then
PERIODS="$M11,$M10,$M9,$M8 ,$M7,$M6,$ M5,$M4,$M3 ,$M2,$M1"
elif [ "$M10" != '' ]; then
PERIODS="$M10,$M9,$M8,$M7, $M6,$M5,$M 4,$M3,$M2, $M1"
elif [ "$M9" != '' ]; then
PERIODS="$M9,$M8,$M7,$M6,$ M5,$M4,$M3 ,$M2,$M1"
elif [ "$M8" != '' ]; then
PERIODS="$M8,$M7,$M6,$M5,$ M4,$M3,$M2 ,$M1"
elif [ "$M7" != '' ]; then
PERIODS="$M7,$M6,$M5,$M4,$ M3,$M2,$M1 "
elif [ "$M6" != '' ]; then
PERIODS="$M6,$M5,$M4,$M3,$ M2,$M1"
elif [ "$M5" != '' ]; then
PERIODS="$M5,$M4,$M3,$M2,$ M1"
elif [ "$M4" != '' ]; then
PERIODS="$M4,$M3,$M2,$M1"
elif [ "$M3" != '' ]; then
PERIODS="$M3,$M2,$M1"
elif [ "$M2" != '' ]; then
PERIODS="$M2,$M1"
elif [ "$M1" != '' ]; then
PERIODS="$M1"
fi
echo "PERIODS = " $PERIODS >> "$LOGFILE" 2>&1
##Create Replication
function runrepcycle1cmd
{
/db2olap/bin/essmsh << END
login $USER $PASSWORD on $SERVER;
spool stdout on to '/db2olap/scripts/angietes t/logs/rep cycle1_std out.txt';
spool stderr on to '/db2olap/scripts/angietes t/logs/rep cycle1_std err.txt';
create replicated partition $SRCAPP.$SRCDB area '$PERIODS, $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0),
@Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0),
@Levmbrs(Activity,0)' to $TGAPP.$TGDB at $SERVER as $USER identified by '$PASSWORD' using $USER identified by '$PASSWORD' for
creation area '$PERIODS, $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense
Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' update allow;
spool off;
exit;
END
}
echo "run the repcycle1cmd function" >> "$LOGFILE" 2>&1
runrepcycle1cmd;
echo "refresh replicated partition $SRCAPP.$SRCDB to $TGAPP.$TGDB at $SERVER all data;"|essmsh -l $USER $PASSWORD -i
unset TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 PERIODS
done < /db2olap/scripts/angietest /CreateRep licationCy cle1.txt
-------------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------
Any help is GREATLY appreciated!
This is a ksh script - the file looks as such:
M3EMGP1 M3EMGP1 M3EMGP2 M3EMGP2 Actual Jan_PY1 Feb_PY1 Mar_PY1
M3EMGP3 M3EMGP3 M3EMGP2 M3EMGP2 Actual Jan_PY1 Feb_PY1 Mar_PY1 Apr_PY1 May_PY1 Jun_PY1
And the applicable code looks as such:
--------------------------
while read TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 junk<
/db2olap/scripts/angietest
do
#not sure this is needed twice - added it to try and solve my issue
read TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 < /db2olap/scripts/angietest
## Map the Parms
TGAPP=$TGAPP
TGDB=$TGDB
SRCAPP=$SRCAPP
SRCDB=$SRCDB
CAT=$CAT
M1=$M1
M2=$M2
M3=$M3
M4=$M4
M5=$M5
M6=$M6
M7=$M7
M8=$M8
M9=$M9
M10=$M10
M11=$M11
PERIODS=$PERIODS
## echo to the logfile to verify they were set correctly
echo "Variables and Parm Settings" >> "$LOGFILE" 2>&1
echo "TGAPP =" $TGAPP >> "$LOGFILE" 2>&1
echo "TGDB =" $TGDB >> "$LOGFILE" 2>&1
echo "SRCAPP =" $SRCAPP >> "$LOGFILE" 2>&1
echo "SRCDB = " $SRCDB >> "$LOGFILE" 2>&1
echo "CAT =" $CAT >> "$LOGFILE" 2>&1
echo "M1 = " $M1 >> "$LOGFILE" 2>&1
echo "M2 = " $M2 >> "$LOGFILE" 2>&1
echo "M3 = " $M3 >> "$LOGFILE" 2>&1
echo "M4 = " $M4 >> "$LOGFILE" 2>&1
echo "M5 = " $M5 >> "$LOGFILE" 2>&1
echo "M6 = " $M6 >> "$LOGFILE" 2>&1
echo "M7 = " $M7 >> "$LOGFILE" 2>&1
echo "M8 = " $M8 >> "$LOGFILE" 2>&1
echo "M9 = " $M9 >> "$LOGFILE" 2>&1
echo "M10 = " $M10 >> "$LOGFILE" 2>&1
echo "M11 = " $M11 >> "$LOGFILE" 2>&1
##Create Month variable string
if [ "$M11" != '' ]; then
PERIODS="$M11,$M10,$M9,$M8
elif [ "$M10" != '' ]; then
PERIODS="$M10,$M9,$M8,$M7,
elif [ "$M9" != '' ]; then
PERIODS="$M9,$M8,$M7,$M6,$
elif [ "$M8" != '' ]; then
PERIODS="$M8,$M7,$M6,$M5,$
elif [ "$M7" != '' ]; then
PERIODS="$M7,$M6,$M5,$M4,$
elif [ "$M6" != '' ]; then
PERIODS="$M6,$M5,$M4,$M3,$
elif [ "$M5" != '' ]; then
PERIODS="$M5,$M4,$M3,$M2,$
elif [ "$M4" != '' ]; then
PERIODS="$M4,$M3,$M2,$M1"
elif [ "$M3" != '' ]; then
PERIODS="$M3,$M2,$M1"
elif [ "$M2" != '' ]; then
PERIODS="$M2,$M1"
elif [ "$M1" != '' ]; then
PERIODS="$M1"
fi
echo "PERIODS = " $PERIODS >> "$LOGFILE" 2>&1
##Create Replication
function runrepcycle1cmd
{
/db2olap/bin/essmsh << END
login $USER $PASSWORD on $SERVER;
spool stdout on to '/db2olap/scripts/angietes
spool stderr on to '/db2olap/scripts/angietes
create replicated partition $SRCAPP.$SRCDB area '$PERIODS, $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0),
@Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0),
@Levmbrs(Activity,0)' to $TGAPP.$TGDB at $SERVER as $USER identified by '$PASSWORD' using $USER identified by '$PASSWORD' for
creation area '$PERIODS, $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense
Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' update allow;
spool off;
exit;
END
}
echo "run the repcycle1cmd function" >> "$LOGFILE" 2>&1
runrepcycle1cmd;
echo "refresh replicated partition $SRCAPP.$SRCDB to $TGAPP.$TGDB at $SERVER all data;"|essmsh -l $USER $PASSWORD -i
unset TGAPP TGDB SRCAPP SRCDB CAT M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 PERIODS
done < /db2olap/scripts/angietest
--------------------------
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Well - live and learn - I learned I was being redundant - when you READ this sets the variables... since my file has varrying lengths - we combined the end of the file to ONE variable we called PERIODS... then we can read the file and skip the whole if loop... - apparantly matbiol, we do not need to be more explicit than telling it to "do" a series of commands until it is "done"
Here is what the final code looked like:
------------------------
while read TGAPP TGDB SRCAPP SRCDB CAT PERIODS
do
## echo to the logfile to verify they were set correctly
echo "Variables and Parm Settings" >> "$LOGFILE" 2>&1
echo "TGAPP =" $TGAPP >> "$LOGFILE" 2>&1
echo "TGDB =" $TGDB >> "$LOGFILE" 2>&1
echo "SRCAPP =" $SRCAPP >> "$LOGFILE" 2>&1
echo "SRCDB = " $SRCDB >> "$LOGFILE" 2>&1
echo "CAT =" $CAT >> "$LOGFILE" 2>&1
echo "PERIODS = " $PERIODS >> "$LOGFILE" 2>&1
##Create Replication
function runrepcycle1cmd
{
/db2olap/bin/essmsh << END
login $USER $PASSWORD on $SERVER;
spool stdout on to '/db2olap/scripts/angietes t/logs/rep cycle1_std out.txt';
spool stderr on to '/db2olap/scripts/angietes t/logs/rep cycle1_std err.txt';
create replicated partition $SRCAPP.$SRCDB area '$PERIODS $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' to $TGAPP.$TGDB at $SERVER as $USER identified by '$PASSWORD' using $USER identified by '$PASSWORD' for creation area '$PERIODS $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' update allow;
spool off;
exit;
END
}
echo "run the repcycle1cmd function" >> "$LOGFILE" 2>&1
runrepcycle1cmd;
echo "refresh replicated partition $SRCAPP.$SRCDB to $TGAPP.$TGDB at $SERVER all data;"|essmsh -l $USER $PASSWORD -i
done < /db2olap/scripts/angietest /CreateRep licationCy cle1.txt
Here is what the final code looked like:
------------------------
while read TGAPP TGDB SRCAPP SRCDB CAT PERIODS
do
## echo to the logfile to verify they were set correctly
echo "Variables and Parm Settings" >> "$LOGFILE" 2>&1
echo "TGAPP =" $TGAPP >> "$LOGFILE" 2>&1
echo "TGDB =" $TGDB >> "$LOGFILE" 2>&1
echo "SRCAPP =" $SRCAPP >> "$LOGFILE" 2>&1
echo "SRCDB = " $SRCDB >> "$LOGFILE" 2>&1
echo "CAT =" $CAT >> "$LOGFILE" 2>&1
echo "PERIODS = " $PERIODS >> "$LOGFILE" 2>&1
##Create Replication
function runrepcycle1cmd
{
/db2olap/bin/essmsh << END
login $USER $PASSWORD on $SERVER;
spool stdout on to '/db2olap/scripts/angietes
spool stderr on to '/db2olap/scripts/angietes
create replicated partition $SRCAPP.$SRCDB area '$PERIODS $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' to $TGAPP.$TGDB at $SERVER as $USER identified by '$PASSWORD' using $USER identified by '$PASSWORD' for creation area '$PERIODS $CAT, @Levmbrs(ACT,0), @Levmbrs(AAT,0), @Levmbrs(ServTU,0), @Levmbrs(SubTU,0), @Levmbrs("Expense Product",0), @LevMbrs(Account,0), @Levmbrs(Center,0), @Levmbrs(Activity,0)' update allow;
spool off;
exit;
END
}
echo "run the repcycle1cmd function" >> "$LOGFILE" 2>&1
runrepcycle1cmd;
echo "refresh replicated partition $SRCAPP.$SRCDB to $TGAPP.$TGDB at $SERVER all data;"|essmsh -l $USER $PASSWORD -i
done < /db2olap/scripts/angietest
ASKER