Text in eine Datei einfügen

Hallo,

ich würde gerne Text in eine Datei einfügen, komme aber nicht drauf, wie das geht.

1.) In einem bestimmten Pfad habe ich eine kleine ini-Datei
2.) Eine Script-Datei soll Teile dieser ini-Datei übernehmen.

ad 1)

grep „;“ $JCLPATH/ini.jcl
liefert mir:
;datenbank;benutzer;passwort;

ad 2)

db2 „connect to L502020T user hugo using bimbam100“ > /dev/null
db2 „delete from kunde“
db2 „quit“ > /dev/null

Nun würde ich diese Script-Datei gerne ändern, sodass anstatt
L502020T „datenbank“ automatisch aus der entsprechenden ini-Datei
eingefügt wird. Dh der begriff zwischen den ersten beiden „;“ soll
L502020T ersetzen.

Wie geht das?

Danke & viele Grüße
Gerald

Hallo,

googeln nach „bash read IFS“ liefert unter anderem dies:

http://www.linuxquestions.org/questions/programming-…

Als ersten Prototyp:


#!/bin/bash
OLDIFS=$IFS
IFS=';'

cat $JCLPATH/ini.jcl|while read database user password
do
echo "connect to $database user $user using $password"
done

IFS=$OLDIFS

Gruß Lutz

echo

Hallo Lutz,

danke für dein Script - helfen tuts nicht wirklich.
Es scheint zu funktionieren, nur wenn ich es in das db2-script einbaue,

#!/bin/bash
OLDIFS=$IFS
IFS=';'

cat $JCLPATH/ini.jcl|while read trash database user password
do
echo "connect to $database user $user using $password"
done

IFS=$OLDIFS

db2 "connect to $database user $user using $password"
...

bekomme ich:

SQL0104N An unexpected token „using“ was found following „USER“. Expected
tokens may include: „USER“. SQLSTATE=42601

Und pro DB2-Befehl:

DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1024N A database connection does not exist. SQLSTATE=08003

Mir wäre etwas ohne diesem while … do … done lieber, falls soetwas
möglich ist.

Danke & Gruß
Geri

Hi,

da fehlen doch noch etwas Grundlagen der Programmierung.

Die Befehle, die die gelesenen Parameter verwenden, müssen in den Codeblock der Schleife, also zwischen do und done. Außerhalb müssen die Variablen als ungültig angesehen werden. (Sind sie nicht, ist aber eine sinnvolle Regel.)

Was ist denn die volle Ausgabe? Macht der echo-Befehl irgendetwas sinnvolles? Evtl. habe ich auch das Problem nicht ganz verstanden und der dritte Parameter gehört gar nicht in diesen SQL-Befehl. So gut kenne ich SQL nicht.

MfG Lutz

Hallo Lutz, danke für die Infos!

Hi,

da fehlen doch noch etwas Grundlagen der Programmierung.

Die Befehle, die die gelesenen Parameter verwenden, müssen in
den Codeblock der Schleife, also zwischen do und done.
Außerhalb müssen die Variablen als ungültig angesehen werden.
(Sind sie nicht, ist aber eine sinnvolle Regel.)

So ein Konzept ist mir neu, ich denke, ich habe hier einige Defizite in der Script-Sprache… :frowning:
mMn hat eine Ausgabe (echo) in einer Schleife wenig Sinn.

Was ist denn die volle Ausgabe? Macht der echo-Befehl
irgendetwas sinnvolles? Evtl. habe ich auch das Problem nicht
ganz verstanden und der dritte Parameter gehört gar nicht in
diesen SQL-Befehl. So gut kenne ich SQL nicht.

MfG Lutz

Der original-SQL-Befehl baut eine Verbindung zur Datenbank auf
Also im Original-Script:

db2 "connect to L50204T user geri using bimbam100"

Der Codeblock scheint es auch richtig zu machen, zumindest die echo-ausgabe ist richtig,
eventuell stört dann dieses „IFS=$OLDIFS“.

Ich wollte aus Deinem Script

#!/bin/bash
OLDIFS=$IFS
IFS=';'

cat $JCLPATH/ini.jcl|while read trash database user password
do
echo "connect to $database user $user using $password"
done

IFS=$OLDIFS

plus dem Original-Script

db2 "connect to L50204T user geri using bimbam100" 
db2 "delete from kunde"
db2 "quit" \> /dev/null

die Kombination

#!/bin/bash
OLDIFS=$IFS
IFS=';'

cat $JCLPATH/ini.jcl|while read trash database user password
do
db2 "connect to $database user $user using $password"
done

IFS=$OLDIFS

db2 "delete from kunde"
db2 "quit" \> /dev/null

machen. Das funktioniert aber wg. der vorhin gemeldeten Fehlermeldung nicht.

Ich hatte mir eigentlich einen Befehl in etwa

Teilstring(cat $JCLPATH/ini.jcl;SucheErstes";";SucheZweites";")

erwartet, dass so etwas möglich ist. Dh. Dass ein
String nach einem Zeichen durchsucht wird, und die Position zurückgegeben wird und ein weiterer Befehl einen Teilstring anhand der gefundenen Positionen zurückgeben kann (ähnlich wie in
Excel, wenn ich das so sagen darf :smile:
Bei den Beschreibungen von sed und awk hab ich gleich mal nix verstanden, aber vllt gibts ja auch andere einfachere Befehle…

Danke & Gruß Gerald