tcsh script -> bash: foreach Schleife
Hallo Liste! Ich bastel mir im Moment ein Firewall Script für die bash zusammen, als Vorlage dient mir jedoch ein tcsh Script. Nun bin ich beim Portieren auf ein Problem gestoßen und weiß nicht ganz wie ich diese Funktion "übersetzen" soll. Im original Code steht folgendes: foreach ns ( $NS ) $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT end In der Variable $NS werden die IPs der DNS des Providers zu anfang des Scripts gespeichert. Von daher glaube ich sowieso das im Original ein Fehler vorliegt, da in Zeile 2 die Variable $ns genannt wird. Meiner Meinung nach müsste diese $NS heißen. Nun aber zum eigentlichem Problem. Ich habe keine Ahnung wie ich die foreach Schleife in die bash portieren soll. foreach kenn die bash nicht. In einem Buch das ich mir aus der Bücherrei geliehen habe hab' ich auch nicht so viel gefunden. Kann mir jemand helfen? Also die Schleife soll bewirken, dass die Regeln auf die _zwei_ in $NS gespeicherten IPs gesetzt wird. Weiß jemand Rat? Für Tips bin ich dankbar. Einen guten Rutsch euch allen. Gruß Marius
Hi Marius, hi Liste, Marius Brehler wrote:
Hallo Liste! Ich bastel mir im Moment ein Firewall Script für die bash zusammen, als Vorlage dient mir jedoch ein tcsh Script. Nun bin ich beim Portieren auf ein Problem gestoßen und weiß nicht ganz wie ich diese Funktion "übersetzen" soll. Im original Code steht folgendes:
foreach ns ( $NS ) $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT end
for ns in $NS do $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT done hth cu Gerald
Am Freitag, 28. Dezember 2001 02:00 schrieb Gerald Goebel:
Hi Marius, hi Liste,
Marius Brehler wrote:
Hallo Liste! Ich bastel mir im Moment ein Firewall Script für die bash zusammen, als Vorlage dient mir jedoch ein tcsh Script. Nun bin ich beim Portieren auf ein Problem gestoßen und weiß nicht ganz wie ich diese Funktion "übersetzen" soll. Im original Code steht folgendes:
foreach ns ( $NS ) $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT end
for ns in $NS do $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT done
hth
cu Gerald
Super, danke :-) Marius
* Marius Brehler schrieb am 27.Dez.2001:
Ich bastel mir im Moment ein Firewall Script für die bash zusammen, als Vorlage dient mir jedoch ein tcsh Script. Nun bin ich beim Portieren auf ein Problem gestoßen und weiß nicht ganz wie ich diese Funktion "übersetzen" soll. Im original Code steht folgendes:
foreach ns ( $NS ) $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT end
Warum läßt Du nicht das tcshSkript? Ansonsten geht es in der bash folgendermaßen: for ns in $NS do ... done Bernd -- Probleme mit dem Drucker? Schon die Druckercheckliste beachtet? http://localhost/doc/sdb/de/html/drucker-howto.html | Auch lesenswert: Oder schon das Drucker-HOWTO gelesen? | man lpr file://usr/shar/doc/howto/de/DE-Drucker-HOWTO.txt.gz | Zufallssignatur 3
Am Freitag, 28. Dezember 2001 09:33 schrieb Bernd Brodesser:
* Marius Brehler schrieb am 27.Dez.2001:
Ich bastel mir im Moment ein Firewall Script für die bash zusammen, als Vorlage dient mir jedoch ein tcsh Script. Nun bin ich beim Portieren auf ein Problem gestoßen und weiß nicht ganz wie ich diese Funktion "übersetzen" soll. Im original Code steht folgendes:
foreach ns ( $NS ) $IPT -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT end
Warum läßt Du nicht das tcshSkript? Ansonsten geht es in der bash folgendermaßen:
for ns in $NS do ... done
Ich hatte ursprünglich vor es für tcsh zu lassen, aber irgendwie wollte das nicht. Auch nachdem ich in die tcsh gewechselt habe hat die shell gemekert. Warum weiß ich nicht. War eigentlich alles richtig. Deswegen habe ich mir dann gesagt, das iches auch gleich für bash portieren kann. Danke für den Tip. Grüße Marius
Hallo Marius, so sollte es gehen: for dns in `cat /etc/resolv.conf | grep nameserver | awk '{print $2}'` do iptables -A OUTPUT -o $ExternalNetworkDevice -p UDP --sport $HighPorts --dport domain \ -d $dns -m state --state NEW -j ACCEPT iptables -A FORWARD -o $ExternalNetworkDevice -p UDP --sport $HighPorts --dport domain \ -d $dns -m state --state NEW -j ACCEPT done Alles in eine Zeile (also die Iptabels Regeln) und gut ist. Habe ich übrigens aus meinem (noch unfertigen) Firewallskript von www.grepmail.de/swfirewall.txt genommen! Gruß Sebastian www.wolfgarten.com
Am Freitag, 28. Dezember 2001 17:31 schrieb Sebastian Wolfgarten:
Hallo Marius,
so sollte es gehen: for dns in `cat /etc/resolv.conf | grep nameserver | awk '{print $2}'` do iptables -A OUTPUT -o $ExternalNetworkDevice -p UDP --sport $HighPorts --dport domain \ -d $dns -m state --state NEW -j ACCEPT iptables -A FORWARD -o $ExternalNetworkDevice -p UDP --sport $HighPorts --dport domain \ -d $dns -m state --state NEW -j ACCEPT done
Alles in eine Zeile (also die Iptabels Regeln) und gut ist. Habe ich übrigens aus meinem (noch unfertigen) Firewallskript von www.grepmail.de/swfirewall.txt genommen!
Gruß Sebastian www.wolfgarten.com
Das ist auch ne wirklich gute Idee. Werde ich mal in mein Script einbauen :-) Danke für den Tip. Mein Script wird in Zukunft unter http://linux.sungazer.de/firewall/ zu finden sein. Grüße Marius
participants (4)
-
B.Brodesser@t-online.de
-
Gerald Goebel
-
Marius Brehler
-
Sebastian Wolfgarten