Ok, I'll go first, even though this is more of a "whyTF".
Have a look at this piece of genius.
I've only pulled the bare bones because these scripts are HUGE.
Names are changed for the usual reasons.
dumpdb.sh follows:
#!/bin/ksh
function showtables
{
cat << EOF
acc:client_account
amt:client_model_type
...
700 lines later
...
ugp:ultimate_group_parameter
vap:validation_parameter
EOF
}
function execSQL
{
eval "echo \"$SQL_HEADER$1$SQLTRAILER\" \
|sqlplus -S $ORACONNECT |path=/usr/xpg4/bin:"$PATH" awk -F: $AWK_PROG \
| sed 's/::/: :/g' | sed 's/~:/:/g' \
$OUT_FILTER \
$ OUTPUT"
}
.
. 700 functions like this, one per table.
.
function fDump_client
{
execSQL "select * from client;"
}
.
for table in $tables_to_dump
do
if [[ "$TO_TAB_FILE" == "Y" ]]; then
## Send output to file named <table>.csv
export OUTPUT=" > $table.csv"
echo "Dumping $table to $table.csv"
fi
# Get filter if required
if [[ $? -eq 0 ]]; then
# There is a specific function for this table so use it
fDump_${table}
else
# No function - just use default SELECT
execSQL "select * from ${table};"
fi
done
which is called by "application support scripts" as demonstrated:
#!/bin/ksh
function select_client_access_type
{
# dbselect gives:
#
# 1 CLIENT_KEY NOT NULL CHAR(3)
# 2 MEMBER_KEY VARCHAR2(4)
# 3 NAME VARCHAR2(50)
# 4 PHONE VARCHAR2(22)
# 5 ACCESS_ENABLED VARCHAR2(1)
# 6 ACCESS_TYPE CHAR(1)
# 7 MM_AND_OR_CLIENT VARCHAR2(1)
# 8 RIGHTS_GROUP_ID NUMBER(4)
# 9 MANAGER_ID NUMBER(38)
IFS=:
if ! set -- $(dumpdb | grep "^${CLIENT_KEY}:")
then
echo "CLIENT '$CLIENT_KEY' not found"
exit $EXIT_NO_CLIENT
fi
MEMBER_KEY="$2"
ACCESS_ENABLED="$5"
ACCESS_TYPE="$6"
MM_AND_OR_CLIENT="$7"
RIGHTS_GROUP_ID="$8"
if [[ $ACCESS_ENABLED != Y ]]
then
if [[ $ACCESS_TYPE != T ]]
then
echo "CLIENT ACCESS_TYPE is $ACCESS_TYPE"
fi
fi
}
1 comment:
You know, I think ALL SHELLSCRIPTS written in corporate IT departments are crap. Why do people embark on these grand projects when they don't even know (for example) that you can combine "if" conditions using "&&", or what "export" actually does? And what is this bizarre compulsion to define odd bits of the program dynamically in text variables? Is there no shellscript driving test for Heaven's sake?
Post a Comment