quasimodosklon
Goto Top

Textdatei mit Variablen in Shellscript verarbeiten

Eine Textdatei, die Variablen enthält, soll per Shellscript eingelesen und verarbeitet werden.

Hallo,

ich suche eine Lösung, um nicht ausführbare Texte, die aber Variablen enthalten, in einem Shellscript einzulesen.

source führt aus und erscheint für den gegebenen Fall nicht anwendbar. cat

z.B. Beispiel die Ausgabe einer Begrüßung...
Was natürlich funktioniert, ist
VORNAME=Hans
NACHNAME=Mustermann

cat <<_EOT_
Guten Tag $VORNAME $NACHNAME,

bla... blubb...

Mit freundlichen Grüßen
_EOT_

Was ich nicht hinbekomme, ist etwas wie ungefähr hier erkennbar wird:
VORNAME=Hans
NACHNAME=Mustermann

cat <<_EOT_
Geht natürlich beides nicht:
$(cat quelldateiname)
$(source quelldateiname)
_EOT_

...also Datei einlesen und Variablen ersetzen.

Hat da irgend jemand eine Idee?

Content-ID: 124938

Url: https://administrator.de/forum/textdatei-mit-variablen-in-shellscript-verarbeiten-124938.html

Ausgedruckt am: 22.12.2024 um 10:12 Uhr

ralfkausk
ralfkausk 15.09.2009 um 10:46:01 Uhr
Goto Top
cat << EOF
'cat %datei_1%'
'cat %datei_1%'
EOF
ralfkausk
ralfkausk 15.09.2009 um 17:47:14 Uhr
Goto Top
oder ...
::: Dateien erzeugen
echo "eins" > eins
echo "zwei" > zwei

::: Variablen erstellen
erster=`cat eins`
zweiter=´cat zwei`

::: Script
cat << EOF
$erster
$zweiter
EOF

::: Ausgabe
eins
zwei
QuasimodosKlon
QuasimodosKlon 17.09.2009 um 09:03:37 Uhr
Goto Top
Hm, das erste Beispiel funktioniert bei mir gar nicht, und das zweite ist nicht das, was ich meine.

Textdatei 'testfile' enthält:
Die Variable TESTVAR enthält: $TESTVAR

Shell-Script 'heredoctest' enhält:
#!/bin/bash

TESTVAR=Testwert

cat <<_EOT_
'cat %testfile%'  
`cat %testfile%`
`cat testfile`
_EOT_

Ausgabe:
cat: %testfile%: Datei oder Verzeichnis nicht gefunden
'cat %testfile%'  

Die Variable TESTVAR enthält: $TESTVAR

Soll:
Die Variable TESTVAR enthält: Testwert
RiffRaff
RiffRaff 22.09.2009 um 19:59:19 Uhr
Goto Top
Wie "source führt aus"?

Bsp.: Eine Datei die die Namen enthält, bsp. "namen.txt"
### Meine Name
Vorname=Hans
Nachname=Mustermann
###
## Ende


Eine Datei, die Begrüssen soll, bsp.: gruss.sh

#!/bin/sh
NAMENDATEI=namen.txt
### Jetzt sourcen wir die Namen - befindet sich im gleichen Verzeichnis wie das Shellscript
. ./$NAMENDATEI
##
### Variablen sind nun verfügbar
echo "Guten Tag $Vorname $Nachname"
echo "Hau bloss ab, Du Hund"
###
#

Oder habe ich es auch falsch verstanden? Sourcen ist doch wunderbar.
QuasimodosKlon
QuasimodosKlon 01.01.2010 um 14:22:16 Uhr
Goto Top
Zitat von @RiffRaff:
Wie "source führt aus"?
[...]
Oder habe ich es auch falsch verstanden? Sourcen ist doch wunderbar.

Öhm ja, nicht die Variablen sollen per Quelle gelesen werden, sondern genauer ausgedrückt ein Template, in welches Variablen eingefügt werden, die im Script selbst definiert sind.

z.B. Quell-Template "test.txt":
Hallo $var1!
Hier ist $var2.

Beim Sourcen käme der Fehler, daß das Kommando "Hallo" nicht gefunden wird.

Hab's nach langem Probieren mittlerweile so gelöst:
#/bin/bash
var1=Menschen
var2='Zeile 2'  

function template
{ 
  eval "echo \"`cat $1`\""  
}

template test.txt>testout.txt

Ergebnis:
Hallo Menschen!
Hier ist Zeile 2.

Also im Prinzip genau was ich suchte, und funktioniert über mehrere Zeilen. Fällt jemanden vielleicht noch eine geschicktere Variante ein?

lg Quasi
QuasimodosKlon
QuasimodosKlon 22.01.2010 um 13:21:42 Uhr
Goto Top
Ok, kommt wohl nix mehr, dann mache ich mal zu... *gelöst*