![Wie verbindet man zwei Bedingungen in einem Bash-Skript?](https://rvso.com/image/89160/Wie%20verbindet%20man%20zwei%20Bedingungen%20in%20einem%20Bash-Skript%3F.png)
Hinweis: Update 28. Juni
Ich habe ein iptables script.sh (interpretiert von bash) mit den Regeln:
function run_ips(){
for ip in $(sed '/#.*/d' ips.txt); do
if echo $ip | grep -q "-" >/dev/null; then
iptables -A FORWARD -m mac --mac-source $mac -o eth0 -p tcp --dport 443 -m iprange --dst-range "$ip" -j ACCEPT
else
iptables -A FORWARD -m mac --mac-source $mac -o eth0 -p tcp --dport 443 -d $ip -j ACCEPT
fi
done
}
for mac in $(awk -F";" '{print $2}' macs.txt); do
iptables -t nat -A PREROUTING -i eth1 -m mac --mac-source $mac -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A INPUT -i eth1 -m mac --mac-source $mac -p tcp --dport 8080 -j ACCEPT
run_ips
done
Wobei macs.txt Mac-Adressen und ips.txt IP-Adressen oder Bereiche enthält, getrennt durch "-"
Fehler: Eine andere App hält derzeit die Xtables-Sperre. Vielleicht möchten Sie die Option -w verwenden?
(dies wird von der Funktion „run_ips“ generiert)
Wie kann ich beide Teile vereinen?
Antwort1
Ich sehe hier keine Notwendigkeit für eine Funktion. Wenn Sie eine Funktion benötigen, ist es möglicherweise am besten, die Variable als Parameter zu übergeben, anstatt zu versuchen, sie als globale Variable zu verwenden. Es scheint jedoch ziemlich einfach zu sein, die Schleifen einfach zu verschachteln:
for mac in $(awk -F";" '{print $2}' macs.txt); do
iptables -t nat -A PREROUTING -i eth1 -m mac --mac-source $mac -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A INPUT -i eth1 -m mac --mac-source $mac -p tcp --dport 8080 -j ACCEPT
for ip in $(sed '/#.*/d' ips.txt); do
if echo $ip | grep -q "-" >/dev/null; then
iptables -A FORWARD -m mac --mac-source $mac -o eth0 -p tcp --dport 443 -m iprange --dst-range "$ip" -j ACCEPT
else
iptables -A FORWARD -m mac --mac-source $mac -o eth0 -p tcp --dport 443 -d $ip -j ACCEPT
fi
done
done
Was die Fehlermeldung betrifft, scheint es, als ob Sie einen Prozess laufen lassen, während diese Regeln gleichzeitig verarbeitet werden. Vielleicht sollten Sie einfach -w
Ihre iptables-Zeilen ergänzen, wie der Fehler vorschlägt. Diese Option sollte bewirken, dass iptables wartet, bis die xtables-Sperre freigegeben wird.