• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 388
  • Last Modified:

error calling unix script

Hi,
I am running below unix script as below

$ call test.sh
ksh: call:  not found
$

As i am not good in unix so please help me finish this.

#---- Set Environment
mdmdb="ABC"
mdmdbuser="USER"
mdmdbpwd="AAA"

#---- Connect to the Database
db2 connect to $mdmdb user $mdmdbuser using $mdmdbpwd

#
# Whatever you want to do goes here...
#
EXPORT TO
\userin\AA\TEST.ixf OF IXF
MESSAGES
\userin\AA\TEST.log
select * from SYSIBM.SYSDUMMY1

#---- Terminate DB2
db2 terminate
0
sam2929
Asked:
sam2929
  • 6
  • 5
  • 3
  • +2
1 Solution
 
ozoCommented:
run it as

. test.sh
0
 
sam2929Author Commented:
looks like we need to give db2 path name

test.sh[7]: db2:  not found
test.sh[12]: EXPORT:  not found
0
 
ozoCommented:
Is `EXPORT` supposed to be a shell command, or are you trying to pass it as input to the db2 command?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
sam2929Author Commented:
pass input to db2 command
0
 
TintinCommented:
#!/bin/sh
#---- Set Environment
mdmdb="ABC"
mdmdbuser="USER"
mdmdbpwd="AAA"
PATH=$PATH:/directory/of/db2
export PATH

#---- Connect to the Database
db2 connect to $mdmdb user $mdmdbuser using $mdmdbpwd <<EOF

#
# Whatever you want to do goes here...
#
EXPORT TO
\userin\AA\TEST.ixf OF IXF
MESSAGES
\userin\AA\TEST.log
select * from SYSIBM.SYSDUMMY1
EOF

#---- Terminate DB2
db2 terminate

Open in new window

0
 
sam2929Author Commented:
I am not sure what path is but i found old script where some thing like this is done before is it possible to find what the path is from below script


Open in new window

if [ $? -eq 0 ]
  then
   DSENV="DEV"
   SCRIPT_DIR=/opt/IBM/InformationServer/Server/Projects/test_dev/Data
   PWS_SSH_KEY=${SCRIPT_DIR}/.ssh/id_rsa-MII-Test  ; export PWS_SSH_KEY
   . /db2_src/db2roar/sqllib/db2profile
     db_name=dev ; export db_name
     USER_PWS=aaa ; export USER_PWS
     HOST_PWS=99.99.99.00 ; export HOST_PWS
     PWS_TARGET_DIR="/db2_database/db2extracts/ibmcom/NcDbFeeds/cdt" ; export PWS_TARGET_DIR
     # temporary, until UAT project is online :
     PWS_TARGET_DIR="/db2_database/db2extracts/ibmcom/NcDbFeeds/pre" ; export PWS_TARGET_DIR
     HOST_PWS=99.99.99.99; export HOST_PWS
0
 
John PopeIT ConsultantCommented:
Hello

The path to the 'db2' command is not in that code you listed above.

To find out where your db2 command is run the following as root user;

find / -type f -name db2 -print

Open in new window


This should give you your path to the location of the command.  All you need to do is use the directory path.  Lets say the 'db2' command is located here,

/opt/ibm/db2db/cmds/db2

Open in new window


You set your $PATH to be,

$PATH=$PATH:/opt/ibm/db2db/cmds

Open in new window


Assuming you are coding it like Tintin suggests above.


Cheers, JP.
0
 
TintinCommented:
Doing

. /db2_src/db2roar/sqllib/db2profile

is most likely setting the PATH and other required variables.
0
 
simon3270Commented:
Re the initial comment, I'd advise against running
. test.sh

Open in new window

in this case.  True, it is a quick way of running a script that doesn't have execute permission, but it runs in your shell's own environment, so any shell or environment variables that are changed will be changed in your interactive shell.  This is sometimes what you want, but in this case the script does some work and is not intended to set variables which are remembered after the script is run.  In particular, if it does something like "PATH=$PATH:/opt/ibm/db2db/cmds", then "/opt/ibm/db2db/cmds" will be added to your path every time you source the script, so that PATH will get longer and longer.

Better would be
bash test.sh

Open in new window

, assuming you are running a bash login shell.  If not, replace "bash" with whatever shell you are using.
0
 
ozoCommented:
I agree.  It looked at first to me as if the script was intended to set  environment variables in your shell.
0
 
simon3270Commented:
Me too - it was only later posts that told us it was an action script!
0
 
sam2929Author Commented:
getting below error now


#!/bin/sh
#---- Set Environment
mdmdb="AA"
mdmdbuser="BB"
mdmdbpwd="CC"
PATH=$PATH:/db2_src/db2ruin/sqllib/bin
export PATH

#---- Connect to the Database
db2 connect to $mdmdb user $mdmdbuser using $mdmdbpwd

#
# Whatever you want to do goes here...
#
EXPORT TO
/userin/Integration_dev/marketing_acct_em.ixf OF IXF
MESSAGES
/userin/Integration_dev/marketing_acct_em.log
select 'x' as id  from SYSIBM.SYSDUMMY1

EOF
      

#---- Terminate DB2
db2 terminate


test.sh[15]: EXPORT:  not found
test.sh[16]: /userin/Integration_dev/marketing_acct_em.ixf:  not found
test.sh[17]: MESSAGES:  not found
test.sh[18]: /userin/Integration_dev/marketing_acct_em.log:  not found
test.sh[19]: syntax error at line 19 : `as' unexpected
$
0
 
simon3270Commented:
you are missing the

    <<EOF

at the end of the "db2 connect" line
0
 
sam2929Author Commented:
That worked but i didn't see below statment ixf or log file created in same directory

EXPORT TO
/userin/Integration_dev/marketing_acct_em.ixf OF IXF
MESSAGES
/userin/Integration_dev/marketing_acct_em.log
select 'x' as id  from SYSIBM.SYSDUMMY1
0
 
simon3270Commented:
I've dug around a bit more (I don't have a db2 system I can try this on), but I think you've merged two ways of running db2 commands - one where you precede each command with "db2", and one where you don't.

Please try either of these:
db2 "connect to $mdmdb user $mdmdbuser using $mdmdbpwd"
db2 "EXPORT TO /userin/Integration_dev/marketing_acct_em.ixf OF IXF MESSAGES /userin/Integration_dev/marketing_acct_em.log select 'x' as id  from SYSIBM.SYSDUMMY1"
db2 terminate

Open in new window

or
db2 <<EOF
connect to $mdmdb user $mdmdbuser using $mdmdbpwd
EXPORT TO /userin/Integration_dev/marketing_acct_em.ixf OF IXF MESSAGES /userin/Integration_dev/marketing_acct_em.log select 'x' as id  from SYSIBM.SYSDUMMY1"
terminate
EOF

Open in new window

(this code replaces everything from your "db2 connect" line to your "db2 terminate" line)
0
 
sam2929Author Commented:
Below script works now
1)i want to encrypt the mdmdbpwd password how can i do that
2) I have another folder /userin/dev/archive i want to archive 10 days worth of file there with time stamp too.

#!/bin/sh
#---- Set Environment
mdmdb="EMMDB"
mdmdbuser="MKT_DBO"
mdmdbpwd="time44up"
#-----PATH=$PATH:/db2_src/db2ruin/sqllib/bin
#------export PATH
. /db2_src/db2ruin/sqllib/db2profile

#---- Connect to the Database
db2 connect to $mdmdb user $mdmdbuser using $mdmdbpwd 

#
# Whatever you want to do goes here...
#
db2 "EXPORT TO
/userin/MAT_Integration_dev/marketing_acct_em.ixf OF IXF
MESSAGES
/userin/MAT_Integration_dev/marketing_acct_em.log
select 'x' as id  from SYSIBM.SYSDUMMY1"

	

#---- Terminate DB2
db2 terminate

Open in new window

0
 
simon3270Commented:
Excellent.

No idea how to encrypt your password, and not enough information to archive your files, but those are separate questions - this one's answered!
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 6
  • 5
  • 3
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now