Toon posts:

[BASH] Text+VAR = VAR

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmz, hoe leggen we dit uit.
Ik heb een Variabele ($PROTO) met daarin TCP UDP.
Hierna moet hij nog een lus uitvoeren, alleen moeten de waarden nu uit INET_TCP of uit INET_UDP gehaald worden.

code:
1
2
3
4
5
6
7
8
9
10
PROTO="TCP UDP"
INET_TCP="20 21 80 8080"
INET_UDP="53"

for TCP_UDP in $PROTO ; do
  for PORT in INET_${TCP_UDP} ; do
    echo -n "INET -> BAK : $TCP_UDP : $PORT : ACCEPT"
    echo -e "\t\t\t\t [ \e[0;32mDONE\e[0m ]"
  done
done


Zo even snel getyped.
INET_${TCP_UDP} is dus niet goed.
${INET_${TCP_UDP}} werkt ook niet.

uuhm, is het nog begrijpelijk ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben al iets verder :)
maar er nog niet helemaal uit... :(

code:
1
2
3
4
5
6
7
8
9
10
PROTO="TCP UDP"
INET_TCP="20 21 80 8080"
INET_UDP="53"

for TCP_UDP in $PROTO ; do
  for PORT in $[INET_${TCP_UDP}] ; do
    echo -n "INET -> BAK : $TCP_UDP : $PORT : ACCEPT"
    echo -e "\t\t\t\t [ \e[0;32mDONE\e[0m ]"
  done
done


Bovenstaande code gaat goed zolang er niet meer dan 1 waarde in INET_TCP of INET_UDP staat.
Dit komt waarschijnlijk omdat hij met de brackets [] het als 1 waarde leest.

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 22-09 14:35

D2k

P&W -> NOS

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Subtiel schopje.

Ben er nog steeds niet uit :(
Mijn Unix scripting boekje gaat ook niet zover (indien het al mogelijk is).
Internet leverd me ook nog steeds geen goede resultaten (of ik zoek verkeerd)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 19 oktober 2002 @ 23:33:
INET_${TCP_UDP} is dus niet goed.
${INET_${TCP_UDP}} werkt ook niet.
Hmm, bedoel je dat je de value van een variable wil interpoleren in de naam van een andere variable ?

Dus, als $a = foo en $b = bar dan je via $a_$b "foobar" wil bekomen ? Dat zijn volgens mij references, en die zijn, voor zover ik weet, niet geïmplementeerd in bash. Probeer je scriptje anders eens om te zetten in perl, waar references wel in zijn geïmplementeerd.


waarschuwing: bovenstaande kan complete rubbish van mijnentwege zijn :|

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
$a = foo en $b = bar dan je via $a_$b "foobar" wil bekomen
Ongeveer Hawk.
ik heb een vaste text "INET_" een variabele TCP_UDP "TCP UDP" een variabele INET_TCP "80 8080 20 21" en een variabele INET_UDP "53"
Nu is het de bedoeling dat een lus
code:
1
echo -n "INET -> BAK : $TCP_UDP : $PORT : ACCEPT"

uitvoerd.
dus de uitkomsten zouden moeten zijn
code:
1
2
3
4
5
INET -> BAK : TCP : 80 : ACCEPT
INET -> BAK : TCP : 8080 : ACCEPT
INET -> BAK : TCP : 20 : ACCEPT
INET -> BAK : TCP : 21 : ACCEPT
INET -> BAK : UDP : 53 : ACCEPT

Nu kun je dit heel lomp maken door TCP en UDP apart te doen, maar deze wou ik direct implementeren.

Eerst zou een lus dus TCP doorlopen en daarna een lus INET_TCP uitvoeren waarvan het bolde stukje dus een variabele is..
Daarna de lus UDP met lus INET_UDP.

Acties:
  • 0 Henk 'm!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 18:13
Wat Hawk zegt - je zit op de grens van wat nog kan met Bash - ik zou niet weten of dit kan, volgens Hawk dus niet en ik ben geneigd 'm te geloven helaas :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik weet niet of ik het nou verkeerd begrijp, maar volgens mij kan dat gewoon zo:
code:
1
2
3
4
5
6
7
DATE=`date +%Y%m%d`

#MCC 8001
if [ `ls cashier.* | grep '' -c` != "0" -a ! -f "cashier-$DATE.tar.bz2" ]; then
            
        tar -jcvf "cashier-$DATE.tar.bz2" cashier.* --remove-files 
fi


Dit is een script dat ik heb geschreven om backups te maken met een datum in de bestandsnaam.

Acties:
  • 0 Henk 'm!

Verwijderd

Oh laat maar, ik praat onzin. Misschien dat het met backtics werkt, zo dus:

[code]
for PORT in `INET_$TCP_UDP` ; do
[\code]

Maar ik weet niet of ik een embedded for-loop zou willen gebruiken voor twee waarden, ik zou het zelf eleganter vinden om gewoon een for-loopje te gebruiken voor UDP en daarna eentje voor TCP, maar ja, wie ben ik ...

Acties:
  • 0 Henk 'm!

  • bkor
  • Registratie: November 2000
  • Niet online
code:
1
2
3
4
5
6
7
8
9
INET_TCP="80 8080 20 21"
INET_UDP="53"
TCP_UDP="TCP UDP"

for proto in $TCP_UDP; do
        for PORT in `eval echo \\$INET_$proto`; do
                echo "INET -> BAK : $proto : $PORT : ACCEPT"
        done
done

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bkor _/-\o_
mijn held :)

Dat werkt Thnx
Pagina: 1