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-Key: 124938

Url: https://administrator.de/contentid/124938

Printed on: April 20, 2024 at 15:04 o'clock

Member: ralfkausk
ralfkausk Sep 15, 2009 at 08:46:01 (UTC)
Goto Top
cat << EOF
'cat %datei_1%'
'cat %datei_1%'
EOF
Member: ralfkausk
ralfkausk Sep 15, 2009 at 15:47:14 (UTC)
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
Member: QuasimodosKlon
QuasimodosKlon Sep 17, 2009 at 07:03:37 (UTC)
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
Member: RiffRaff
RiffRaff Sep 22, 2009 at 17:59:19 (UTC)
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.
Member: QuasimodosKlon
QuasimodosKlon Jan 01, 2010 at 13:22:16 (UTC)
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
Member: QuasimodosKlon
QuasimodosKlon Jan 22, 2010 at 12:21:42 (UTC)
Goto Top
Ok, kommt wohl nix mehr, dann mache ich mal zu... *gelöst*