Portál AbcLinuxu, 10. května 2025 05:27
masterbox=10.0.0.1
masterbox_port=123
slave1box=10.0.0.2
slave1box_port=245
slave2box=10.0.0.15
slave2box_port=981
for box in master slave1 slave2; do
iptables -A FORWARD -d ${${box}box} -p tcp -m tcp --dport ${${box}box_port} -j ACCEPT -m comment --comment "$box:${${box}box_port}"
done
s vysledkem:
iptables -A FORWARD -d 10.0.0.1 -p tcp -m tcp --dport 123 -j ACCEPT -m comment --comment "master:123"
iptables -A FORWARD -d 10.0.0.2 -p tcp -m tcp --dport 245 -j ACCEPT -m comment --comment "slave1:245"
iptables -A FORWARD -d 10.0.0.15 -p tcp -m tcp --dport 981 -j ACCEPT -m comment --comment "slave2:981"
Vim, ze bych to mohle nejakym zpusobem pomoci echa poskladat a nasledne procpat shellem pipou, ale porad nejak verim, ze jde nejak primo zapsat, ze chci hodnotu promenne, jejiz jmeno ziskam takovymto slozenim
Řešení dotazu:
for box in master slave1 slave2; do
iptables -A FORWARD -d $(eval echo "$"${box}box) -p tcp -m tcp --dport $(eval echo "$"${box}box_port) -j ACCEPT -m comment --comment "$box:$(eval echo '$'${box}box_port)"
done
pripadne pokud chci usetrit par volani shellu:
for box in master slave1 slave2; do
ip=$(eval echo "$"${box}box)
port=$(eval echo "$"${box}box_port)
iptables -A FORWARD -d $ip -p tcp -m tcp --dport $port -j ACCEPT -m comment --comment "$box:$port"
done
#!/bin/sh array=(10.0.0.1 135 master 10.0.0.2 136 slave2 10.0.0.3 137 slave3 10.0.0.4 138 slave4 10.0.0.5 139 master) for i in $(seq 0 3 9); do echo iptables -A FORWARD -d ${array[$i]} -p tcp -m tcp --dport ${array[$((i+1))]} -j ACCEPT -m comment --comment \"${array[$((i+2))]}:${array[$((i+1))]}\" done exit 0Akorat to ma vadu, ze musis vedet posledni sekvencni cislo(9).. NN
masterbox=10.0.0.1 box=master b=${box}box echo ${!b}man bash: indirect expansion
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.