Variablen in ein Shellscript einlesen

Bash, Shell, PHP, Python, Perl, CGI
tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Variablen in ein Shellscript einlesen

Post by tenshinhan10 »

Ich möchte aus einer Config Datei Variablen in ein Shellscript einlesen. Da mir Include zu unsicher erscheint, suche ich nach einer Lösung, die nur benötigte Variablen aus der Config Datei zieht.

Es funktioniert derzeit schon. Problem ist nur, das er Zeilenumbrüche nicht richtig erkennt.

Configfile funktioniert:

Code: Select all

VARIABLE1=xxxxx VARIABLE2=xxxxx VARIABLE3=xxxxx
Configfile funktioniert nicht:

Code: Select all

VARIABLE1=xxxxx
VARIABLE2=xxxxx
VARIABLE3=xxxxx
So sieht der Shell Code zum auslesen aus.

Code: Select all

CONFIG="MEINEPFADANGABE"
VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", ""); print;}')
VARIABLE2INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE2/ {sub(".*=", ""); print;}')
VARIABLE3INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE3/ {sub(".*=", ""); print;}')
Wenn ich dies dann einbaue habe ich wie oben erwähnt Zeilenumbrüche drin. Ich nehme an das kommt durch die Configfiles, in denen nach jeder Zeile ein:

Code: Select all

^M
steht. Meine Frage ist, ob man dies noch rausfiltern kann.

Ich hab schon folgendes ohne Erfolg versucht:
VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "^M"); print;}')
tuxi
Posts: 14
Joined: 2004-03-13 21:28
Location: Süddeutschland

Re: Variablen in ein Shellscript einlesen

Post by tuxi »

hat das ^M nicht irgendetwas mit Zeilenumbrüchen im M$-Stil zu tun?

Warum nimmst du nicht normale Definitionen und machst ein source auf das File?
tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: Variablen in ein Shellscript einlesen

Post by tenshinhan10 »

^M kommt leider immer rein, wenn das Configfile durch meinen WebFTP verändert wird. Es sollte möglich sein, das irgendwie abzuschneiden b.z.w. auszugrenzen.

Kannst Du mir bitte für Deinen Vorschlag einen Beispielcode posten ?
tuxi
Posts: 14
Joined: 2004-03-13 21:28
Location: Süddeutschland

Re: Variablen in ein Shellscript einlesen

Post by tuxi »

tenshinhan10 wrote:Kannst Du mir bitte für Deinen Vorschlag einen Beispielcode posten ?
Beschreibung zum Befehl source aus der Manpage von bash:
source filename [arguments]
Read and execute commands from filename in the current shell
D.h. ein File erstellen mit deinen Variablen, wie gewohnt durch neue Zeilen und dieses dann in deinem Shellskript mittels source filename einbinden.
wirsing
Posts: 604
Joined: 2002-11-20 21:32
Location: Vaihingen und Karlsruhe

Re: Variablen in ein Shellscript einlesen

Post by wirsing »

tenshinhan10 wrote:Ich hab schon folgendes ohne Erfolg versucht:

Code: Select all

VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "^M"); print;}')
Probier doch stattdessen mal

Code: Select all

VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "r"); print;}')
r ist der Literal für Carriage Return, so wie n für Line Feed steht.
Alternativ: benutze einen ordentlichen FTP-Client und lade die Datei im ASCII-Modus hoch
ODER: nimm die Carriage Returns mit dos2unix raus.
tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: Variablen in ein Shellscript einlesen

Post by tenshinhan10 »

Vielen Dank für die Antworten.

@tuxi: Die Lösung mit Source b.z.w. include ist zu unsicher. Neben den Variablen kann so ziemlich alles noch in die Config und damit auch ins Shellscript kommen.

@wirsing: Ich hab Carriage Return getestet. Dies schneidet mir die ^M auch raus. Jedoch ist dann die Config nur noch ein Klumpen und er kann das nicht ordentlich zuordnen. Ich hab dann im Shellscript VARIABLE1=xxxx statt xxxx stehen. Dos2Unix arbeitet einwandfrei. Damit habe ich den Fehler weg bekommen. Ich werde aber trotzdem mal weiter suchen, da ich mir sicher bin, wenn ich das Script 10 mal zur gleichen Zeit aufrufe wirds einiges an CPU Last geben. Eine andere Möglichkeit habe ich noch gefunden:

perl -p -i -e 's/rn/n/g' <filename>

Die werde ich nochmal in Ruhe testen.