The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Operating Systems > Linux
.
google unix.com



Linux RedHat, Ubuntu, SUSE, Fedora, Debian, Mandriva, Slackware, Gentoo linux, PCLinuxOS. All Linux questions here!

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Snytax error on If Statement--help dannyd_y Shell Programming and Scripting 2 05-07-2008 11:25 PM
Error with if statement..Please help jisha Shell Programming and Scripting 1 01-16-2008 07:13 AM
parsing error in if statement rakeshou Shell Programming and Scripting 2 09-25-2007 10:46 AM
For loop statement - catch error lumdev Shell Programming and Scripting 4 09-20-2007 07:50 AM
tar error statement legato UNIX for Dummies Questions & Answers 3 03-29-2005 09:58 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 05-09-2008
capri_drm capri_drm is offline
Registered User
  
 

Join Date: May 2008
Location: St. Louis
Posts: 78
error in if statement

Hi ,
I am getting an error when I run the script for checking word "view" in a file . I am using if statement. like this

if [ cat $TN.${ecmdate}.sql1 | grep -i view ]
then
VW_VAR=` cat $TN.${ecmdate}.sql1 | grep -i view | awk '{print $3}' | cut -d '.' -f2 `
echo " VW_$VW_VAR "
sed -e 's/'${VW_VAR}'/VW_'${VW_VAR}'/g' $TN.${ecmdate}.sql1 > $TN.${ecmdate}.sql
else
cat $TN.${ecmdate}.sql1 > $TN.${ecmdate}.sql
fi

But I am getting error in the end like this

migration_orig.shl[106]: test: ] missing
grep: can't open ]

the script name is migration_orig.shl .

Any input is appreciated .
  #2 (permalink)  
Old 05-09-2008
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Location: NM
Posts: 5,717
It looks like you're using /bin/sh

try:
Code:
grep -iq 'view' $TN.${ecmdate}.sql1 
if [  $? -eq 0 ]
  #3 (permalink)  
Old 05-09-2008
capri_drm capri_drm is offline
Registered User
  
 

Join Date: May 2008
Location: St. Louis
Posts: 78
I am pasting the code that I am using .
I am trying to get ddl based on table names passed in table.lst file .
I am doing 2 things here.
a) Changing tablespace name to _S02 . ( Thanks for the help on that )
b) Adding VW as prefix to all the view names .

I have written error part in the section where I get the error .

I get error on adding VW section.
It works fine for tablespace name add . But doesn't change the View name.
i.e. view name = DAYA.DIM_DATE
DESIRED OUTPUT I WANT IS LIKE THIS
DAYA.VW_DIM_DATE


#!/bin/ksh
USAGE='USAGE: miglook.shl [Source_DBNAME-required] [Source_Schema] [Target_Schema]'

if [[ $# -lt 3 ]]; then
clear
echo "\nIncorrect usage!!\n"
echo "Script was invoked last time as: miglook.shl $*"
echo "\nThe correct usage is:\n"
echo "$USAGE"
echo "\n************************************************************************************************* ********************************************"
echo "Arguments:"
echo "Source_DBNAME i.e. Name of database from which to extract DDL"
echo "Source_Schema i.e. Name of schema from which objects DDL need to be extracted"
echo "Target_Schema i.e. Name of schema for which DDL need to be created\n"
echo "*************************************************************************************************** ******************************************\n"
exit
fi

dbname=$1
source_schema=$2
target_schema=$3

typeset -u dbname

tmpfile_tab=/tmp/tmpfile_tab
tmpfile_dep=/tmp/tmpfile_tab_dep
tmpfile_cln=/tmp/tmpfile_cln


ecmdate=`date +%Y%m%d`
db2 connect to $dbname

if [ $2 ]
then
source_schema=$2
else
source_schema='UHCDM001'
fi

if [ $3 ]
then
target_schema=$3
else
target_schema=${source_schema}
fi

typeset -u source_schema
typeset -u target_schema
cat table.lst | \
while read TN
do

#################################################################################################### #########################################################
# convert the table name read to lowercase to statdardise for tkt name.
#################################################################################################### #########################################################

typeset -l TN

#################################################################################################### #########################################################
# Create list of dependent objects for base table
#################################################################################################### #########################################################

echo $TN > ${tmpfile_tab}_$TN
db2 -x "select tabname from syscat.tabdep where bschema=upper('${source_schema}') and bname=upper('$TN') and btype in ('T','V','S') " > ${tmpfile_dep}_$TN

cat ${tmpfile_dep}_$TN | while read line
do
db2 -x "select tabname from syscat.tabdep where bschema=upper('${source_schema}') and bname=upper('$line') and btype in ('T','V','S') " >> ${tmpfile_dep}_$TN
done

cat ${tmpfile_dep}_$TN >> ${tmpfile_tab}_$TN

#################################################################################################### #########################################################
# Extracting DDL for base table and its dependent dependent objects along with their grants.
#################################################################################################### #########################################################

cat ${tmpfile_tab}_$TN | while read tname
do
db2look -d ${dbname} -z ${source_schema} -t ${tname} -e -x >> $TN.${ecmdate}.sql
cat $TN.${ecmdate}.sql | tr a-z A-Z > $TN.${ecmdate}.sql

done

#################################################################################################### ########################################################
# Cleaning the table
#################################################################################################### #########################################################

cat $TN.${ecmdate}.sql |egrep -v "^--|^$|CONNECT|COMMIT|TERMINATE" > $tmpfile_cln
cat $tmpfile_cln |egrep -v "SET CURRENT" > $TN.${ecmdate}.sql
echo "CONNECT TO $dbname ;" > $tmpfile_cln
echo "SET SESSION_USER $target_schema ;" >> $tmpfile_cln
echo "SET CURRENT SCHEMA $target_schema ; " >> $tmpfile_cln
cat $TN.${ecmdate}.sql >> $tmpfile_cln
echo "COMMIT WORK ; " >> $tmpfile_cln
echo "CONNECT RESET ; " >> $tmpfile_cln
echo "TERMINATE ; " >> $tmpfile_cln
#################################################################################################### #########################################################
# If moving same set of tables from one schema to other schema in same datebase then rename schema correctly
#################################################################################################### #########################################################

if [[ ${source_schema} != ${target_schema} ]]; then
cat $tmpfile_cln | sed -e 's/'${source_schema}'/'${target_schema}'/g' > $TN.${ecmdate}.sql

typeset -l source_schema
typeset -l target_schema
# cat $TN.${ecmdate}.sql1 > $TN.${ecmdate}.sql
cat $TN.${ecmdate}.sql | sed -e 's/'${source_schema}'/'${target_schema}'/g' > $tmpfile_cln
cat $TN.${ecmdate}.sql > $tmpfile_cln
sed -e 's/\(TEST[^"]*\)/\1_S02/g' $tmpfile_cln > $TN.${ecmdate}.sql

##############################################################################
#checks if the file has view in it ADD VW_ TO VIEW NAME (ERROR PART )
#############################################################################
grep -iq 'view' $TN.${ecmdate}.sql
if [ $? -eq 0 ]
then
VW_VAR=` cat $TN.${ecmdate}.sql | grep -i view | awk '{print $3}' | cut -d '.' -f2 `
echo " VW_$VW_VAR "
sed -e 's/'${VW_VAR}'/VW_'${VW_VAR}'/g' $TN.${ecmdate}.sql > $tmpfile_cln
else
cat $TN.${ecmdate}.sql > $tmpfile_cln
fi
$tmpfile_cln > $TN.${ecmdate}.sql

################################################################################################


#cat $TN.${ecmdate}.sql
typeset -u source_schema
typeset -u target_schema
fi

#################################################################################################### ########################################
# Cleaning up old files
#################################################################################################### #########################################################

rm ${tmpfile_tab}_$TN
rm ${tmpfile_dep}_$TN
rm $tmpfile_cln

done

db2 terminate


any help is appreciated .

Thanks a lot in advance !
  #4 (permalink)  
Old 05-09-2008
capri_drm capri_drm is offline
Registered User
  
 

Join Date: May 2008
Location: St. Louis
Posts: 78
I modified the add VW_ section. When I run it as sh -x scriptname <dbname> <source_schema> <target schema>
the output on screen is exactly what I want but the files generated is not the one. I am missing the output of files somewhere .

##############################################################################
#checks if the file has view in it
#############################################################################
cat $TN.${ecmdate}.sql | grep -i 'view'
if [ $? -eq 0 ]
then
VW_VAR=` cat $TN.${ecmdate}.sql | grep -i view | awk '{print $3}' | cut -d '.' -f2 `
echo " VW_$VW_VAR "
sed -e 's/'${VW_VAR}'/VW_'${VW_VAR}'/g' $TN.${ecmdate}.sql > $tmpfile_cln
cat $tmpfile_cln
# cat $tmpfile_cln > $TN.${ecmdate}.sql
else
cat $TN.${ecmdate}.sql > $tmpfile_cln
fi

################################################################################################

help please !
  #5 (permalink)  
Old 05-12-2008
era era is offline Forum Advisor  
Herder of Useless Cats (On Sabbatical)
  
 

Join Date: Mar 2008
Location: /there/is/only/bin/sh
Posts: 3,652
It would really help to see what the output is supposed to be, and what you are currently getting.

As an aside, you have multiple occurrences of an anti-pattern known as Useless Use of Cat, and also Useless Use of Grep and Useless Use of Test $?.

cat file | grep anything can always be rephrased as grep anything file as long as a single file is involved.

grep anything | awk '{ print $something }' can basically always be rephrased as awk '/anything/ { print $something }' (use the awk tolower() function on the search string to ignore case).

grep something; if [ $? -eq 0 ] ... can fruitfully be simplified to simply if grep something ...

This is not to pick on you (maybe pick a little bit on jim who ought to know better :-) -- rather an attempt at helping you make your scripts more idiomatic and readable.
  #6 (permalink)  
Old 05-12-2008
capri_drm capri_drm is offline
Registered User
  
 

Join Date: May 2008
Location: St. Louis
Posts: 78
if ( grep view dim_date.20080512.sql )
then
VW_VAR=` awk '/VIEW/ {print $3}' dim_date.20080512.sql | cut -d '.' -f2 `
echo " VW_${VW_VAR} "
sed -e 's/'${VW_VAR}'/VW_'${VW_VAR}'/g' dim_date.20080512.sql
cat $tmpfile_cln
else
cat dim_date.20080512.sql
fi

I am not getting the value for VW_VAR .

Please help here ......
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 09:08 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0