help with the script.


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers help with the script.
# 1  
Old 01-10-2002
help with the script.

Hi all,
I am currently unable to find out as to where I am going wrong.
MY script does all the desired work but unfortunately prints multiple copies Instead of one copy.
This is my script:
I have a file which contains the number to be passed:
Suppose my File is named as ACODE.
The contents are numbers like:
12345
67892
3246789
9876

now my script is :
Code:
function query_acode {

        typeset scope=query_acode
        typeset tmpbpfile=/tmp/bpfile
        typeset tmpfile=/tmp/acode_$DATE1

        export bpfile=$PRODLOGS/to_print.$TIMESTAMP

        /bin/printf "$bname : Logging into oracle\n" >>$logfile
        /bin/printf "$bname : Strating ACODE query $TIMESTAMP\n" 2>&1 >>$logfile

for invoice in `cat /home/production/bin/$FILENAME`

        #run query
        #check valid file
        #print
        #update table
{
sqlplus -s $CONNECTID <<EOF
spool $bpfile
set heading off
set feedback off
set pagesize 1000
set linesize 1000
set echo off
set verify off
select name,acode,a.external_id,page_count,language_code,dept
from emp_details b, external_id_employees a
where a.account_no=b.account_no
and b.dept in ('J01','X01','X02','X03','X09','X04','X05','X06','X45')
and acode in
(select acode from employees where acode = $invoice
and ps=0 and fs=2 ) and external_id_type=9999
and language_code not in (99)
order by a.external_id;

spool off
EOF
}
if [ -s $bpfile ];then
        /bin/cp $bpfile $tmpfile
        /bin/sed -e '/^$/d' \
                 -e 's/[ ] [ ] */ /g' $bpfile >$tmpfile
        /bin/mv $tmpfile $bpfile
        # check file exists , set the printer and lp & update table

        for record in `cat $bpfile`

        {
                acode1=`awk '{print $2 }' $bpfile`
                ename=`awk ' {print $1 }' $bpfile`
                dept1=`awk '{ print $6 }' $bpfile|cut -c 1 `
                

        if [ "$dept1" = "J" ];then
                if [ -f $PRODREADY/$filename ];then
                        /bin/lp -d $PRINTER  $PROD/$filename
                        [ $? = 0 ] && update_invoices $acode1
                else
                        /bin/printf "$bname : Acode file for $acode1 does not exist\n" >>$logfile
                        /bin/printf "$bname:\t Check format status of Employees $acode1\n"
                fi
        else

                if [ -f $PRODREADY/$filename ];then
                        lp -d $PRINTER $PROD/$filename
                        [ $? = 0 ] && update_invoices $acode1
                else
                        /bin/printf "$bname : acode file for $acode1 does not exist\n" >>$logfile
                        /bin/printf "$bname:\t Check format status of Invoice $acode1\n"

                fi
        fi

        }


else
        /bin/printf "$bname: No information in  database for  $acode1 \n" >>$logfile
fi



}
[[ -n "$TRACE_FUNC" || -n "$TRACE_FUNC_query_acode" ]] &&
typeset -ft query_acode

Please do not worry about the trace functions or the variables as they are all fine but the problem is that it prints multiple copies . Looks like it is going in a loop somewhere and I can't figure out properly.

Your Help will be highly appreciated.

Thanks.
Rooh

added code tags for readability

Last edited by oombera; 02-11-2004 at 03:30 PM..
# 2  
Old 01-10-2002
I think you are going to have to run the sqlplus
like...

sqlplus -s $CONNECTID << EOF
spool $bpfile
...
...
...
EOF
# 3  
Old 01-11-2002
Hi ,
I am sorry that was a typo mistake here.
actually it is currently like :
sqlplus -s $CONNECTID <<EOF
spool $bpfile

so maybe something else is causing a problem.
Please help , if you can find where I am going in the wrong direction.

Thanks.
Rooh
# 4  
Old 01-11-2002
oops ! sorry again a typo mistake.
sqlplus -s $CONNECTID <<EOF
spool $bpfile

This looks correct know.
Sorry about it.

Thanks
Rooh.
# 5  
Old 01-11-2002
There is something Tremendously wrong because before I submit It Looks ok to me but appears with EOF.

Just a another try
sqlplus -s $CONNECTID <<EOF

spool $bpfile

Hope it helps this time.
rooh
# 6  
Old 01-11-2002
Hi rooh,

In a shell script, the sqlplus section needs to be "fed" commands
using the following syntax...

sqlplus -s $CONNECTID << EOF
spool $bpfile
set heading off
set feedback off
set pagesize 1000
set linesize 1000
set echo off
set verify off
select name,acode,a.external_id,page_count,language_code,dept
from emp_details b, external_id_employees a
where a.account_no=b.account_no
and b.dept in ('J01','X01','X02','X03','X09','X04','X05','X06','X45')
and acode in
(select acode from employees where acode = $invoice
and ps=0 and fs=2 )
and external_id_type=9999
and language_code not in (99)
order by a.external_id;

spool off
EOF

...Note the "<< EOF" tag which will feed sqlplus everthing that
follows until the next "EOF" tag is reached.
Just doing...

sqlplus -s $CONNECTID <

...will simply redirect the standard input to, in this case,
nothing which is not what you are looking to do. Also, one
other thing I'm assuming is that the SQL works from the
sqlplus command line.
# 7  
Old 01-11-2002
Re: help with the script.

First, read this to understand why you're have difficulty with angle brackets. And a hint to everyone, I clicked on "quote" for his original post to see his original input. That way I could that his here-document was correct.

rooh, I would have sworn that I knew everything about ksh. But I have never seen your "for" statement syntax before. I tested it and it works. I looked in The New Kornshell Command and Programming Language by Morris Bolsky and David Korn. It's not there. They only show
for i in $list
do
done
and they never mention
for i in $list
{
}
Where did you get this syntax??

You really posted a fragment of a script so it's hard to do anything but visually inspect. But here is something that looks like a double loop waiting to happen:
Quote:
Originally posted by rooh

for record in `cat $bpfile`

{
acode1=`awk '{print $2 }' $bpfile`
ename=`awk ' {print $1 }' $bpfile`
dept1=`awk '{ print $6 }' $bpfile|cut -c 1 `
I think that you either want to lose that "for" loop or crack "record" up into acode1, ename, and dept1.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to block first bash script until second bash script script launches web server/site?

I'm new to utilities like socat and netcat and I'm not clear if they will do what I need. I have a "compileDeployStartWebServer.sh" script and a "StartBrowser.sh" script that are started by emacs/elisp at the same time in two different processes. I'm using Cygwin bash on Windows 10. My... (3 Replies)
Discussion started by: siegfried
3 Replies

2. Shell Programming and Scripting

Shell script works fine as a standalone script but not as part of a bigger script

Hello all, I am facing a weird issue while executing a code below - #!/bin/bash cd /wload/baot/home/baotasa0/sandboxes_finance/ext_ukba_bde/pset sh UKBA_publish.sh UKBA 28082015 3 if then echo "Param file conversion for all the areas are completed, please check in your home directory"... (2 Replies)
Discussion started by: ektubbe
2 Replies

3. UNIX for Dummies Questions & Answers

Calling a script from master script to get value from called script

I am trying to call a script(callingscript.sh) from a master script(masterscript.sh) to get string type value from calling script to master script. I have used scripts mentioned below. #masterscript.sh ./callingscript.sh echo $fileExist #callingscript.sh echo "The script is called"... (2 Replies)
Discussion started by: Raj Roy
2 Replies

4. Shell Programming and Scripting

Script will keep checking running status of another script and also restart called script at night

I am using blow script :-- #!/bin/bash FIND=$(ps -elf | grep "snmp_trap.sh" | grep -v grep) #check snmp_trap.sh is running or not if then # echo "process found" exit 0; else echo "process not found" exec /home/Ketan_r /snmp_trap.sh 2>&1 & disown -h ... (1 Reply)
Discussion started by: ketanraut
1 Replies

5. Shell Programming and Scripting

create a shell script that calls another script and and an awk script

Hi guys I have a shell script that executes sql statemets and sends the output to a file.the script takes in parameters executes sql and sends the result to an output file. #!/bin/sh echo " $2 $3 $4 $5 $6 $7 isql -w400 -U$2 -S$5 -P$3 << xxx use $4 go print"**Changes to the table... (0 Replies)
Discussion started by: magikminox
0 Replies
Login or Register to Ask a Question