Portál AbcLinuxu, 10. května 2025 05:27

Dotaz: (b)ash expanze promennych

Gilhad avatar 6.11.2010 14:41 Gilhad | skóre: 20 | blog: gilhadoviny
(b)ash expanze promennych
Přečteno: 205×
Odpovědět | Admin
Asi neco ocividneho nevidim, ale uz se s tim nejakou chvili morim a nic hezkeho me nenapada. Potreboval bych neco na tento zpusob:

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:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Gilhad avatar 6.11.2010 15:59 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak uz jsem nasel reseni:
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

6.11.2010 16:30 deadmail
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
da sa usetrit dalsia polovica volani eval:
ip=$(eval echo "$"${box}box)
port=${ip}_port
Dokonca aj $(...):
eval ip="\$${box}box"
port="${ip}_port"
6.11.2010 16:22 NN
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jsem si hral:
#!/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 0
Akorat to ma vadu, ze musis vedet posledni sekvencni cislo(9)..

NN
6.11.2010 16:37 deadmail
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
nemusim ;-), to sa da vypocitat
 echo $(((1+${#array})/3 ))
6.11.2010 16:44 deadmail
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
no trochu inac (posledny index bez troch):
 echo $((${#array[*]}-3))
6.11.2010 16:39 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
Odpovědět | | Sbalit | Link | Blokovat | Admin
masterbox=10.0.0.1
box=master
b=${box}box
echo ${!b}
man bash: indirect expansion
If you hold a Unix shell up to your ear, you can you hear the C.
Gilhad avatar 6.11.2010 18:04 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
Ja vedel, ze to musi jit nejak jednoduse :)
6.11.2010 22:10 NN
Rozbalit Rozbalit vše Re: (b)ash expanze promennych
Pekne !

NN

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.