Forums Neueste Beiträge
 

Bash / Parameter falsch gesetzt

20/09/2007 - 14:57 von RandomX | Report spam
Hi,

ich habe folgendes Problem:

es gibt ein textfile /tmp/eintest.txt, das hat folgenden Inhalt:

parameter1 "und ich bin Parameter 2" und-ich-bin-3
Zeile2-param1 param2 "param 3"

Ich möchte nun für jede Zeile dieses Textfiles ein Programm aufrufen,
welches die Zeile als Parameter mitbekommt. Schwierigkeit dabei: Das
Programm soll genau 3 Parameter erhalten (wie aus dem textfile
ersichtlich)

In meinem Bash-Script mach ich folgendes:

while read line; do
echo Zeile=[$line]
execute_cmd $line
done < /tmp/eintest.txt

Allerdings bekommt execute_cmd die Parameter anders als gewünscht:
$1=[parameter1]
$2=["und]
$3=[ich]
$4=[bin]
$5=[Parameter]
$6=[2"]
$7=[und-ich-bin-3]

für die erste Zeile und

$1=[Zeile2-param1]
$2=[param2]
$3=["param]
$4=[3"]

für die zweite Zeile.

Was ich brauche, ist aber das:

$1=[parameter1]
$2=[ich bin Parameter 2]
$3=[und-ich-bin-3]

für die erste Zeile und

$1=[Zeile2-param1]
$2=[param2]
$3=[param 3]

für die zweite Zeile.

Wer kann helfen?




ich möchte per Script iptables-Regeln löschen. Dabei gebe ich dem
Script nicht die gesamte iptables-Regel (iptables braucht zum Löschen
immer den kompletten String). Das Script soll dann alle Regeln, die
diesem Parameter entsprechen, löschen.

Das mache ich folgendermassen:

#
IFS_BACK=$IFS
IFS="
"
for crule in `iptables-save | grep -i -e "$1"`; do
IFS=${IFS_BACK}
fcr=${crule#-A }
iptables -D $fcr
IFS="
"
done
#

Angenommen, "iptables-save" liefert:

-A FORWARD -i eth1 -j LOG --log-prefix "ein Test "

Dann hat fcr den Inhalt

FORWARD -i eth1 -j LOG --log-prefix "ein Test "

und iptables wird dann mit folgenden Parametern aufgerufen:
$1 = -D
$2 = FORWARD
$3 = -i
$4 = eth1
$5 = -j
$6 = LOG
$7 = --log-prefix
$8 = "ein
$9 = Test
$10 = "

(Das sehe ich, wenn ich "iptables" durch ein Script ersetze, welches
mir die alle Parameter einzeln ausgibt)

iptables kommt damit natürlich nicht klar und beschwert sich über den
Parameter "test", denn Parameter $8 müsste eigentlich "ein Test
" (ohne die Anführungszeichen) sein.
Wie krieg ich das per Bash hin,
 

Lesen sie die antworten

#1 RandomX
20/09/2007 - 15:01 | Warnen spam
Ups, da ist was schiefgegangen, hier nochmal:

Hi,

ich habe folgendes Problem:

es gibt ein textfile /tmp/eintest.txt, das hat folgenden Inhalt:

parameter1 "und ich bin Parameter 2" und-ich-bin-3
Zeile2-param1 param2 "param 3"

Ich möchte nun für jede Zeile dieses Textfiles ein Programm aufrufen,
welches die Zeile als Parameter mitbekommt. Schwierigkeit dabei: Das
Programm soll genau 3 Parameter erhalten (wie aus dem textfile
ersichtlich)

In meinem Bash-Script mach ich folgendes:

while read line; do
execute_cmd $line
done < /tmp/eintest.txt

Allerdings bekommt execute_cmd die Parameter anders als gewünscht:
$1=[parameter1]
$2=["und]
$3=[ich]
$4=[bin]
$5=[Parameter]
$6=[2"]
$7=[und-ich-bin-3]

für die erste Zeile und

$1=[Zeile2-param1]
$2=[param2]
$3=["param]
$4=[3"]

für die zweite Zeile.

Was ich brauche, ist aber das:

$1=[parameter1]
$2=[ich bin Parameter 2]
$3=[und-ich-bin-3]

für die erste Zeile und

$1=[Zeile2-param1]
$2=[param2]
$3=[param 3]

für die zweite Zeile.

Wer kann helfen?

Ähnliche fragen