Keep It Simple Stupid
Hier ein Beispiel um zu verdeutlichen was gemeint ist |
So verstehen es nur Insider: |
#!/usr/bin/sh # Scriptname : <- ohne Versionsverwaltung # $Header: /usr/cvs/brroduktion/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/brroduktion/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 |