PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : /bin/bash variablen



gravity
30-03-2004, 08:27
hallo,

habe eine kurze frage zum thema variablen. ist es möglich einer variablen mehrere werte zu geben, die ich alle gleichzeitig ansprechen kann?
hier ein beispiel:

var1=1,2,3
echo $var --> 1 2 3

hintergrund ist der, das ich ein firewallscript vereinfachen will, da zur zeit immer die gleichen 4 zeilen für bestimmte ports vorhanden sind
nun möchte ich das scriptes so umbauen:

PORTS-TCP = (80, 21, 443)
PORTS-UDP=(53)
iptables -A FORWARD -p tcp --dport $PORTS-TCP -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --dport $PORTS-TCP -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp --dport $PORTS-UDP -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp --dport $PORTS-TDP -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

weiß jemand ob das möglich ist? oder hat das eventuell schonmal wer in der form gemacht?

peschmae
30-03-2004, 09:23
wieso nicht
var1="1 2 3 4"
echo $var1

:confused:

Ich blick nicht durch. Ansonsten gibts natürlich auch arrays in der Bash.

MfG Peschmä

fs111
30-03-2004, 09:51
PORTS_TCP = "21 22 80 113 3306"
for port in $PORTS_TCP ; do iptables -A FORWARD -p tcp --dport $port -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT ; done


Sowas?

HTH

fs111

gravity
30-03-2004, 10:30
Original geschrieben von peschmae
wieso nicht
var1="1 2 3 4"
echo $var1



wenn das so funktioniert, wäre das prima und genau das was ich suche, ich habe leider nur SEHR wenig erfahrung in sachen bashscripting und kenne mich deshalb nicht mit der syntax aus. deshalb meine frage...

@fs111

wie oben geschrieben bin ich kein experte und deshalb stellt sich mir, bei deiner zeile, die frage wo du die variable port her nimmst?

fork
30-03-2004, 11:20
for port in $PORTS_TCP
do
iptables -A FORWARD -p tcp --dport $port -i eth0 ....
done

$port ist nur der Bezeichner der nach for angegeben wurde. Näheres zum "bashing" in meiner Signatur.

fs111
30-03-2004, 11:41
Original geschrieben von gravity

@fs111

wie oben geschrieben bin ich kein experte und deshalb stellt sich mir, bei deiner zeile, die frage wo du die variable port her nimmst?

Es wird TCP_PORTS in seine Tokens (alles zwischen zwei Leerzeichen) zerlegt, dieser Token wird der Variablen port zugewiesen, danach wird dann in der Schleife mit $port auf den jeweiligen Token zugegriffen.

Am besten versteht man das, wenn man das erstmal nur mit echo anstatt dem langen iptables Ausdruck macht, und damit ein wenig rumspielt.

Grüße fs111

gravity
30-03-2004, 14:54
hallo,

also wenn ich das richtig verstanden habe, wird die schleife so oft durchlaufen wie die der variablen PORTS_TCP werte zugeordnet sind? also in deinem beispiel 5 mal?
hat jemand die möglichkeit folgendes zu testen? ich habe leider keinen linuxrouter hier und das muss auf dem produktivsystem ohne test funktionieren...


PORTS_TCP = "80 443"
for port in $PORTS_TCP ; do iptables -A FORWARD -p tcp --dport $port -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT ; done
for port in $PORTS_TCP ; do iptables -A FORWARD -p tcp --dport $port -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT ; done

wäre echt dankbar wenn das mal jemand auf seinem router ausführt und danach testet ob http und https noch funktionieren...

fs111
30-03-2004, 17:29
Wie gesagt, teste es mit echo, dann wird es nur ausgegeben, und nix schlimmes passiert, wenn das klappt, geht es auch mit der Schleife.

fs111

gravity
31-03-2004, 11:08
ok, werde es testen, danke für den support!