Es ist aufgrund der unterschiedlichen Menge an Leerzeichen verwendet. Sie können feststellen, dass Sie sich den folgenden Befehl:
diff -u <(iptables -L) - <<EOF | cat -A
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
EOF
Ausgang:
--- /dev/fd/63^I2016-04-11 08:59:52.663962140 +0200$
+++ -^I2016-04-11 08:59:52.666667769 +0200$
@@ -1,8 +1,8 @@$
Chain INPUT (policy ACCEPT)$
-target prot opt source destination $
+target prot opt source destination$
$
Chain FORWARD (policy ACCEPT)$
-target prot opt source destination $
+target prot opt source destination$
$
Chain OUTPUT (policy ACCEPT)$
-target prot opt source destination $
+target prot opt source destination$
Sie sehen, der iptables -L
Befehl anhängt Leerzeichen nach destination
.
dass Leerzeichen zu entfernen, Sie sed verwenden können:
iptables -L | sed 's/[[:space:]]*$//'
Wenn Sie auch die syntax error beheben von Jonathan Leffler entdeckt, sollte Ihr Code arbeiten.
Lassen Sie mich hinzufügen, dass die Art, wie Sie überprüfen, ob "die Firewall nicht aktiv ist" könnte zu schwach sein. (a) Sie sehen, dass der Befehl iptables -L
nicht wirklich für die Textverarbeitung gedacht ist. (b) jemand könnte eine benutzerdefinierte Kette hinzugefügt haben, aber keine Regeln drin. Dies würde Ihre Prüfung fehlschlagen lassen.
Ich habe nicht wirklich eine Idee, wie es besser geht. Wahrscheinlich ist das Ändern von Firewall-Regeln eine Aufgabe, die vom Administrator selbst und nicht von Programmen ausgeführt wird. :)
Nein .. Das funktioniert nicht wirklich .. – MLSC
Sie brauchen einen Platz vor dem schließenden BH wie folgt: 'if [" $ A "==" $ B "]; dann ". Aus Kompatibilitätsgründen ist es besser, single equal zu verwenden. wie 'if [" $ A "=" $ B "]; dann ". – user000001
Kennt jemand ein gutes kanonisches Duplikat dafür? Es ist ein ziemlich häufiges Problem. –