bash script variable modifizieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

bash script variable modifizieren

Beitrag von ren22 » 17.03.2013 17:51:34

Hallo

hoffe ich bin hier nicht falsch ;)

ich versuche gerade ein bash script zu schreiben was zwei variablen hat , das ein programm startet dem ich eine konfigurationsdatei als wert zuweise

#/bin/sh
wert=1
konfig1=/etc/irgenteinekonfig.conf
konfig2=/etc/eineanderekonfig.conf
...

weiter im script versuche ich nun ein programm zu starten und die gewählte konfigrationsdatei verwendet

/usr/local/bin/programm $konfig1

das klappt soweit :)

aber nun suche eine möglichkeit die zahl der konfigvariable so zu ändern das, dass script jeweils die gewählte datei beim starten benutzt.
also konfig1 oder konfig2 etc


/usr/local/bin/programm $konfig1

hab schon versucht mit einer schleife aber dann habe ich das problem das die ausgabe dann zwar "/usr/local/bin/programm $konfig1" ausgibt
aber nicht mehr auf den variablen wert verweist :(

der ursprünglichr variablen wert ist dann der jeweile wert der konfig1 oder konfig2 den ich aber nicht ausgeben bekomme wenn ich versuche die varieble in der schleife zu modofizieren.

Code: Alles auswählen

#!/bin/sh
wert=1
konfigsanzahl=2
konfig1=/etc/irgenteinekonfig.conf
konfig2=/etc/eineanderekonfig.conf
while true; do
        if [ "wert" -gt "$konfigsanzahl" ]; then
               
               wert=1
        fi
/usr/local/bin/programm $(konfig${wert})
sleep 3
killall programm
wert=$(( $wert + 1 ))

also was ich gerne hätte wäre das sich die zahl der an der variable konfigN ändern kann und die geänderte variable dann auf den vorher deifnierten wert der konfigN datei verweist.
also konfigN=/etc/eineanderekonfig.conf

danke
ren22

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash script variable modifizieren

Beitrag von Meillo » 17.03.2013 18:28:24

ren22 hat geschrieben: hoffe ich bin hier nicht falsch ;)
Ich habe den Thread passend verschoben.

Code: Alles auswählen

#!/bin/sh
wert=1
konfigsanzahl=2
konfig1=/etc/irgenteinekonfig.conf
konfig2=/etc/eineanderekonfig.conf
while true; do
        if [ "wert" -gt "$konfigsanzahl" ]; then
               
               wert=1
        fi
/usr/local/bin/programm $(konfig${wert})
sleep 3
killall programm
wert=$(( $wert + 1 ))
Ich bin mir nicht sicher ob ich korrekt verstanden habe was du willst. Ist es vielleicht etwas in der Art:

Code: Alles auswählen

case "$nummer" in
1) config=/etc/foo ;;
2) config=/etc/bar ;;
...
esac
program "$config"
pid=$!
sleep 3
kill $pid
Damit kannst du anhand von $nummer entscheiden welche Config du willst.

(Nebenbei habe ich das Killen etwas verbessert.)

also was ich gerne hätte wäre das sich die zahl der an der variable konfigN ändern kann und die geänderte variable dann auf den vorher deifnierten wert der konfigN datei verweist.
also konfigN=/etc/eineanderekonfig.conf
Wenn du dieses Problem loesen willst, dann brauchst du eval (und das ist schnell mal evil):

Code: Alles auswählen

a=foo
b=1
foo1=x
eval echo \$$a$b	#-> x
eval $a$b=y
echo $foo1		#-> y
Use ed once in a while!

ren22

Re: bash script variable modifizieren

Beitrag von ren22 » 17.03.2013 19:47:27

Ich bin mir nicht sicher ob ich korrekt verstanden habe was du willst. Ist es vielleicht etwas in der Art:
ich möchte nur den variable namen, also konfig1, die die Zahl "1" ändern in 2 , 3 , 4 etc, aber nicht den inhalt der variable,

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: bash script variable modifizieren

Beitrag von Meillo » 17.03.2013 19:57:06

ren22 hat geschrieben: ich möchte nur den variable namen, also konfig1, die die Zahl "1" ändern in 2 , 3 , 4 etc, aber nicht den inhalt der variable,
Wie ich oben geschrieben habe, brauchst du dazu eval. Ich habe dir meinen Codeschnipsel nochmal aufbereitet:

Code: Alles auswählen

konfig1=x
konfig2=y
konfig3=z
for i in 1 2 3 ; do
	eval echo \$konfig$i
done
Use ed once in a while!

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: bash script variable modifizieren

Beitrag von r900 » 17.03.2013 21:37:09

ren22 hat geschrieben:ich möchte nur den variable namen, also konfig1, die die Zahl "1" ändern in 2 , 3 , 4 etc, aber nicht den inhalt der variable,
Schau dir nochmal Meillos Beispiel mit "case" an. Das macht im Endeffekt genau was du willst und ist wesentlich sauberer als die Sache mit eval.

ren22

Re: bash script variable modifizieren

Beitrag von ren22 » 17.03.2013 22:08:35

vielen vielen dank

eval war was ich brauch/te ;)

nun funktioniert es :)

eval /usr/local/bin/programm \$konfig$i

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: bash script variable modifizieren

Beitrag von Liffi » 18.03.2013 06:28:36

ren22 hat geschrieben: eval war was ich brauch/te ;)

nun funktioniert es :)

eval /usr/local/bin/programm \$konfig$i
Nein. Du brauchst kein eval. Wie Meillo schrieb: eval is evil.
Du möchtest case benutzen. Wirklich!

Antworten