K

I

S

S

eep

t

imple

tupid




Hier ein Beispiel um zu verdeutlichen was gemeint ist
So verstehen es nur Insider:
#!/usr/bin/sh

# Scriptname : <- ohne Versionsverwaltung

# $Header: /usr/cvs/produktion/MI/scripts/bin/mk_sql.sh,v 1.1 2002/01/22 12:21:03 xxxxxxx Exp $

# Funktion : Steuerskript zur Ausfuehrung von SQL-Skripten

# Projekt : xxxxxxxxxx

# Ansprechpartner :

# Erstellt: xxxxx xxxxxxxx

# Version : s. Header

# Abhaengigkeiten : keine

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

. /opt/xxxxxxxx/xxxxxxx.conf >/dev/null 2>&1

DATUM=`date +%y_%m_%d_%H:%M:%S`

if [ -f ${xxxxxxx_PASSFILE2} ] ; then

DBPW=`cat ${xxxxxxx_PASSFILE2}`

if [ "X"${DBPW} = "X" ] ; then

echo "PW-File/File leer/unlesbar"

exit -1

fi

fi

INFILE=`basename $1 .sql`.sql

SQLPATH=$xxxxxxx_ENV/scripts/sql

if [ $# = 2 ]; then

OPTIONS=$2

elif [ $# = 1 ]; then

OPTIONS=

elif [ $# -gt 2 ]; then

shift

for i

do

OPTIONS=$OPTIONS"'$i' "

shift

done

else

echo "Kein Parameter" ; exit -1

fi

if [ ! -s ${INFILE} ]; then

if [ ! -s ${SQLPATH}/${INFILE} ]; then

echo "Entweder das File existiert nicht, oder es liegt nicht im richtigen Verzeichnis!"

exit 1

else

INFILE=${SQLPATH}/${INFILE}

fi

fi

MYFILEPATH=`dirname $INFILE`

MYFILE=`basename $INFILE .sql`

egrep "^--connect" $INFILE >/dev/null 2>&1

RC=$?

if [ $RC != 0 ]; then # no connect string in sql file

echo "No valid Connect String in sql file $INFILE."

exit 1

fi

SHFILE=${xxxxxxx_SCRIPTS}/temp/${MYFILE}_$DATUM_$$.sh

SQLFILE=${xxxxxxx_SCRIPTS}/temp/${MYFILE}_$DATUM_$$.sql

sed "1s/{_xxxxxxx_USER}/${xxxxxxx_USER}/;\

1s/{_DBPW_VAL}/${DBPW}/;\

1s/--connect/connect/;\

1s/{_xxxxxxx_CALLS_DB}/${xxxxxxx_CALLS_DB}/;\

1s/{_xxxxxxx_BILLS_DB}/${xxxxxxx_BILLS_DB}/;\

1s/{_xxxxxxx_BASE_DB}/${xxxxxxx_BASE_DB}/;" <${INFILE} >${SQLFILE} 2>/dev/null

trap "rm -f ${SQLFILE}" 0 2 3 9 15

echo "trap \"rm -f ${SQLFILE} \" 0 2 3 9 15" >${SHFILE}

echo >>${SHFILE}

echo "sqlplus -s /nolog @${SQLFILE} $OPTIONS <<EOF" >>${SHFILE}

echo "\`cat ${xxxxxxx_PASSFILE2}\`" >>${SHFILE}

echo "EOF" >>${SHFILE}

echo 'exit $Ret' >>${SHFILE}

chmod 500 ${SHFILE}

cat ${SHFILE}

${SHFILE}

Ret=$?

if [ $Ret != 0 ]; then

echo "SQLPLUS returned with Code $Ret" >&2

fi

echo "removing ${SHFILE}" >&2

rm -f ${SHFILE}

echo "removing ${SQLFILE}" >&2

rm -f ${SQLFILE}

und so kann sogar der Anwender etwas damit anfangen:
#!/usr/bin/bash

# $Header: /usr/cvs/produktion/MI/scripts/sql_run,v 1.1 2002/03/19 17:31:34 libtest Exp $

# set -xv ==========================================================

# Name : sql_run

# Descr. : Ausführen von SQL+ ohne Anzeige von ID und PW in der Prozessliste

# Author : Bernd Jambor

# Date : 25.01.2002

# Syntax : sql_run application scriptname database # applikation = bil / cpe / trm / hot

. /opt/xxxxxx/xxxxxx.conf

case $1 in

"bil" ) APP=$1;;

"cpe" ) APP=$1;;

"trm" ) APP=$1;;

"hot" ) APP=$1;;

* ) echo 'Parameter 1 falsch: bil cpe trm hot'

echo

exit;;

esac

SQLSCRIPT=sql/${APP}_$2.sql # Name des vorhandenen SQL-Scriptes

test -f $SQLSCRIPT || (echo 'Das Script' $SQLSCRIPT 'existiert nicht';echo;exit)

case $3 in

"ca" ) DB=$xxxxxxx_CALLS_DB;;

"bi" ) DB=$xxxxxxx_BILLS_DB;;

"ba" ) DB=$xxxxxxx_BASE_DB;;

* ) echo 'Angabe der Datenbank fehlt: ca bi ba'

echo

exit;;

esac

SQLCMD=temp/DB_CMD.sql # Name der SQL-Datei (temp)

OUTFILE=$xxxxxxx_VAR/$APP/reports/$APP_`date +%y_%m_%d_%H:%M:%S`_$2.txt # Festlegen des Outputs

# Erzeugen des connect-strings in der Datei SQLCMD und Anhängen des sql-scriptes

(echo CONN $USER/`cat $xxxxxxx_PASSFILE2` @$DB;cat $SQLSCRIPT) > $SQLCMD

chmod 400 $SQLCMD # Nur der Owner darf noch lesen

sqlplus -s /NOLOG @$SQLCMD $OUTFILE # Aufruf von SQL*PLUS

rm -f $SQLCMD # Löschen der temporären SQL-Datei