![Como juntar duas condições no script bash?](https://rvso.com/image/89160/Como%20juntar%20duas%20condi%C3%A7%C3%B5es%20no%20script%20bash%3F.png)
Nota: atualização em 28 de junho
Eu tenho um script.sh iptables (interpretado pelo bash) com as regras:
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
Onde macs.txt contém endereços macs e ips.txt contém endereços ips ou intervalos separados por "-"
Erro: Outro aplicativo está mantendo o bloqueio do xtables. Talvez você queira usar a opção -w?
(isso é gerado pela função "run_ips")
Como posso unificar as duas partes?
Responder1
Não vejo necessidade de uma função aqui. Se você precisar de uma função, talvez seja melhor passar a variável como parâmetro, em vez de tentar usá-la como variável global. No entanto, parece bastante simples apenas aninhar os loops:
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
Quanto à mensagem de erro, parece que você tem um processo sendo executado ao mesmo tempo que essas regras estão sendo processadas. Talvez você deva apenas adicionar -w
linhas ao seu iptables, como o erro sugere. Esta opção deve fazer com que o iptables aguarde a liberação do bloqueio do xtables.