It's
looking for the command "nawk" - either find a source package and install it, or
change your script to call awk instead. I'm not sure of any differences
between awk and nawk, but you could give it a shot.
Thanks,
Matt
--
Matthew Zito
GridApp Systems
Email:
[EMAIL PROTECTED]
Cell: 646-220-3551
Phone: 212-358-8211 x 359
http://www.gridapp.com
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Zabair Ahmed
Sent: Monday, August 04, 2003 10:40 AM
To: Multiple recipients of list ORACLE-L
Subject: One for bash experts....I've got the following script that works fine on most flavours of unix apart from Linux...I think I must be going mad as I can't see where the problem isI get the following error when i invoke it.....oracle ukwsv71 >
usedb uktst233bash: nawk: command not found
bash: nawk: command not found
bash: nawk: command not found
bash: nawk: command not found
bash: nawk: command not found
bash: nawk: command not found
bash: nawk: command not found
ORACLE_HOME = [/oracle/app/oracle] ?
TIA
#------------------------------------------------------------------------------
# File: usedb
# System: Information System
# Description: This validates and sets up the oracle environment
# based on the database name.
# Parameters: database name upper or lower case
#
# Notes: "This should be bomb proof but so were many #embasies!"
# It runs in the current shell .
#
# Korn/Bash command line usage
# ----------------------------
# . /proj/oracle/scripts/usedb ukprd33
#
# Bourne command line usage
# ----------------------------
# usedb=ukprd33 . /proj/oracle/scripts/usedb
#
# Interactive use Korn/Bourne or Bash
# -----------------------------------
# . /proj/oracle/scripts/usedb
#
oracle ukwsv71 > cat usedb
#------------------------------------------------------------------------------
# File: usedb
# System: Information System
# Description: This validates and sets up the oracle environment
# based on the database name.
# Parameters: database name upper or lower case
#
# Notes: "This should be bomb proof but s! o were many embasies!"
# It runs in the current shell .
#
# Korn/Bash command line usage
# ----------------------------
# . /proj/oracle/scripts/usedb ukprd33
#
# Bourne command line usage
# ----------------------------
# usedb=ukprd33 . /proj/oracle/scripts/usedb
#
# Interactive use Korn/Bourne or Bash
# -----------------------------------
# . /proj/oracle/scripts/usedb
#
# Using an alias Korn or Bash
# ---------------------------
# alias usedb='. /proj/oracle/scripts/usedb'
# usedb uktst33
# or
# usedb
#
# Date Who Comments
# ======== === ========
# 20-08-98 MJE (Kentlong Ltd.) Glaxowellcome
# 28-04-98 MJE Updated for HPUX
# 10-06-99 MJE Hunt for oratab back in looking at listener is
# unreliable. Looks for the tnsnames file in standard
# place. Removes all environment setings and oracle
# path seting at the start.
# 08-07-99 MJE Changed to work in bourne shell from the command line.
# 30-11-99 IAF Test for Oracle 8.1.5 so as to set up LD_LIBRARY_PATH
# to point to additional directory /usr/ucblink.
# 06-03-00 MJE Changed code to ignore links when looking for oratab
# 07 Aug 2001 M Sabet Fixed the problem with ! the new format of the combined
# merged fSB and fGW tnsnames file. This script basically stopped working.
# But now it should cope with both the old and new combined formats. It is
# always best to stick to just one format and indentation for the tnsnames
# entries if possible. It makes it easier to work with.
#
#------------------------------------------------------------------------------# Set up names for Information and error processing
NODENAME=`uname -n`
SCRIPT=$0
INFO=$NODENAME"::usedb: "
ERROR=$NODENAME"::usedb: Error "# If the operating system is HP-UX then the $NAWK command = awk else use $NAWK.
# Under HP-UX $NAWK does not exist but the $NAWK functions are included with awk
if [ `uname -s|awk '{print substr($0,1,3)}'` = "HP-" ] ; then
NAWK=awk
else
NAWK=nawk
fiif [ -z "$usedb" ] ; then
usedb=$1
fiunset OTAB OTABFILE TNSNAMES VNAM LOCATION TWO_TASK ORACLE_SID ORACLE_HOME# If the database name has not been passed in on the command line
while [ -z "$usedb" ] ; do
echo "Please enter database name e.g. UKTST01 >"
read usedb
echo
done
# Fiddle abort loop
while true ; do# Find the ORATAB file
OTAB=`find /etc /var/opt -type f -name oratab -print 2>/dev/null`
if [ -z "$OTAB" ] ; then
error "The ORATAB file was not found."
unset OTAB OTABFILE TNSNAMES VNAM LOCATION usedb
break
fi# Strip multiple /usr/local/bin (s) from the path and make sure /usr/local/bin
# is first
PATH="/usr/local/bin:"`echo $PATH|sed 's?/usr/local/bin??g'`# Strip all $ORACLE_HOME/bin (s) in oratab from the path
ORACLE_HOMES=`awk -F: '/\*/ {next} /#/ {next} /^$/ {next} {print $2}' $OTAB`
for ORACLE_HOME in $ORACLE_HOMES
do
PATH=`echo $PATH|sed 's?\:'$ORACLE_HOME'\/bin??g'`
done# Replace the two sets of Colons :: with : due to removal of other bits
PATH=`echo $PATH|sed 's?\:\:?:?g'`# Remove last char if the last char is a colon
PATH=`echo $PATH|awk '{ if (substr($0,length(),1) == ":") print substr($0,1,len`export PATH# Set the ORACLE_HOME to the first entry in the oratab
ORACLE_HOME=`awk -F: '/#/ {next} /^$/ {next} {print $2}' $OTAB|head -1`# Locate the tnsnames file
if [ -z "$TNS_ADMIN" ] ; then
# Look in standard place
TNSNAMES=$ORACLE_HOME/network/admin/tnsnames.ora
else
# TNS_ADMIN overrides the standard position of tnsnames
TNSNAMES=$TNS_ADMIN/tnsnames.ora
fi
unset ORACLE_HOMEif [ ! -f "$TNSNAMES" ] ; then
echo $ERROR "$TNSNAMES not found, exiting ..."
unset OTAB OTABFILE TNSNAMES VNAM LOCATION usedb
break
fi# Force database name to uppercase
usedb=`echo $usedb|$NAWK '{print toupper($1)}'`# Validate database name in tnsnames
# Convert tnsnames to uppercase and remove all spaces (NAWK)
# grep out usedb= (GREP)
# Strip off the = character (SED)
#VNAM=`$NAWK '{gsub(/ /,""); print toupper($0)}' $TNSNAMES|grep "$usedb="|sed 'VNAM=`$NAWK '{gsub(/ /,""); gsub(/ /,""); print toupper($0)}' $TNSNAMES|gr`
# Compare the result of search with original to ensure not partial string
if [ "$usedb" != "$VNAM" ] ; then# Unset all the oracle logicals due to error in name
echo $ERROR
echo "Environment not set up for database $usedb name not found in"
echo "$TNSNAMES"
unset OTAB OTABFILE TNSNAMES VNAM LOCATION usedb
breakelse
# Get the oracle sid from the tnsnames file for the database
# Convert tnsnames to uppercase and remove all spaces (NAWK1)
# Get all lines from $usedb= to SID= substituting SID= with ? (NAWK2)
# Get the last line which now = '?SID' (TAIL)
# Use ? as the field delimiter and print the second field SID (AWK)
ORACLE_SID=`$NAWK '{gsub(/ /,"");print toupper($0)}' $TNSNAMES|$NAWK '/'$used`
export ORACLE_SIDfi# If SID not in oratab then this is a remote database
# Change to upper case and remove comment lines from oratab (NAWK)
# Match $ORACLE_SID with line in oratab and print field 1=SID (AWK)
# Compare with original SID to check that the sid is not a partial string
if [ "`$NAWK '/#/ {next} {print toupper($0)}' $OTAB|awk -F: '/'$ORACLE_SID'/{ p]
then
# Remote database
# Set the ORACLE_SID as the first entry in the oratab file
# Remove comment lines from oratab (GREP)
# Remove blank lines (SED)
# Print the first field. (AWK)
# Print the first line, first sid (HEAD)
ORACLE_SID=`grep -v "#" $OTAB|sed '/^$/d'|awk -F: '{print $1}'|head -1`
export ORACLE_SID
# Set up the two task environment variable
TWO_TASK=$usedb;export TWO_TASK
LOCATION="remote"
else
# We have now found the SID in the oratab sug! esting that it is local
# , we need to know if the sid is upper or lower case as the user may
# have typed in the wrong case.if [ "`$NAWK -F: '/#/ {next} /'$ORACLE_SID'/ {print $1}' $OTAB`" != "$ORACLE_]
then
# lowercase the sid
ORACLE_SID=`echo $ORACLE_SID|$NAWK '{print tolower($1)}'`
export ORACLE_SID
fi
LOCATION="local"
fi# Run oraenv in the normal way
ORAENV_ASK=NO;export ORAENV_ASK
if [ ! -f /usr/local/bin/oraenv ] ;then
"/usr/local/bin/oraenv not found or oracle not on machine."
unset OTAB OTABFILE TNSNAMES VNAM LOCATION usedb
break
fi
. /usr/local/bin/oraenv
ORAENV_ASK=YES;export ORAENV_ASKif [ "$LOCATION" = "remote" ] ; then
unset ORACLE_SID
fi# If operating system SunOS then dynamic library path must be set
if [ `uname -s` = "SunOS" ]; then
# 30 Nov 99
# Following added if using Oracle 8.1.5. The "proc" utiltiy (pro*c compiler)
# locations /usr/ucblib for library files must be added.
# We test for specifically Oracle 8.1.5. ( 8.1.6 may be different).
ora_8=`echo $ORACLE_HOME | grep -c '8.1.5'`
if [ $ora_8 -eq 0 ]
then
LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/usr/openwin/lib:/usr/dt/lib
export LD_LIBRARY_PATH
else
LD_LIBRARY_PATH=${ORACLE_HOME}/lib:/usr/ucblib
export LD_LIBRARY_PATH
fi
fiecho $INFO
echo "Oracle "`basename $ORACLE_HOME`" Set up for $LOCATION database $usedb"
unset OTAB OTABFILE TNSNAMES VNAM LOCATION usedb# end of abort loop
break
done
Yahoo! Plus - For a better Internet experience