![¿Cómo unir dos condiciones en un script bash?](https://rvso.com/image/89160/%C2%BFC%C3%B3mo%20unir%20dos%20condiciones%20en%20un%20script%20bash%3F.png)
Nota: Actualización 28 de junio
Tengo un script.sh de iptables (interpretado por bash) con las reglas:
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
Donde macs.txt contiene direcciones macs e ips.txt contiene direcciones ips o rangos separados por "-"
Error: otra aplicación actualmente mantiene el bloqueo de xtables. ¿Quizás quieras utilizar la opción -w?
(esto es generado por la función "run_ips")
¿Cómo puedo unificar ambas partes?
Respuesta1
No veo la necesidad de una función aquí. Si necesita una función, sería mejor pasar la variable como parámetro, en lugar de intentar usarla como una variable global. Sin embargo, parece bastante sencillo simplemente anidar los bucles:
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
En cuanto al mensaje de error, parece que se está ejecutando un proceso al mismo tiempo que se procesan estas reglas. Quizás deberías simplemente agregar -w
líneas a tus iptables, como sugiere el error. Esta opción debería hacer que iptables espere a que se libere el bloqueo de xtables.