Portál AbcLinuxu, 13. května 2025 18:28

Dotaz: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde

31.5.2006 14:39 Palo
cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Přečteno: 127×
Odpovědět | Admin
Zdravim, zacinam se teprve trochu seznamovat s shellem a programovanim vubec, takze vam mozna muj dotaz bude pripadat asi stupidne. V kazdem pripade jsem stravil nekolik hodin s mnoha ruznymi zpusoby jak danou vec poresit a marne. Rovnez jsem par hodin procital diskuze, ale nikde jsem nenarazil na neco podobneho, takze syntax a zpusob zapisu mi je porad neznamy. Hodim sem jednu ze svych neuspesnych verzi a pokusim se popsat, co by to melo delat. Prosim o jakekoliv nakopnuti, fakt si nevim rady a kdyz mi ukazete/priblizite jak se takove veci resi, urcite uz s necim takovym prudit nebudu. Diky
#!/bin/bash 
set $(netstat | grep -m 14 tcp | awk '{print $4, $5}' | cut -f 2 -d: | cut -f 2 -d' ')
while :
do
 echo "$(tcpdump -i ra0 |grep $1)"
  shift || break 
done
exit 0
takze pomoci set predam vysledky dotazu v zavorkach. TO mi vrati aktualni seznam navazanych spojeni na protokolu TCP... problem je v tom, ze nazvy jsou zkracene, takze v pripade delsiho domenoveho nazvu vlastne neni videt, s kym je spojeni navazano. Proto chci ony neuplne nazvy pouzit v dotazu "tcpdump -i ra0" kde pomoci grep a predane promenne ze set, ziskam uplne domenove nazvy z prave aktivnich spojeni. Kdyz jsem zkousel toto ( viz nize ), promenne predane ze set se zobrazily, ale uvnitr cyklu uz nejsem schopen ony predane promenne pouzit v dalsim dotazu. Rekl bych, ze podobne pripady jsou caste a s nakopnutim/vysvetlenim uz urcite pochopim, jak podobne pripady resit.
#!/bin/bash
set $(netstat | grep -m 14 tcp | awk '{print $4, $5}' | cut -f 2 -d: | cut -f 2 -d' ')
while :
do 
  echo $1
  shift || break 
done
exit 0
Tohle mi pri volani echo $1 zobrazi vypisy z retezce netstat...takze snad jsem na spravne ceste, ale promennou uz v dalsim dotazu ( v prikazu tcpdump.. )opravdu pozit nemohu. Dekuji moc za pomoc a nakopnuti - polopate prosim. P.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.5.2006 15:05 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problem je v tom tcpdump - ten posloucha, dokud ho nekdo/neco neukonci> dokud nepujde pres ra0 nejaky paket obsahujici ono domenove jmeno, nic neukaze. Tudiz IMHO tudy cesta nevede. Co treba zkusit pridat netsatu parametr -n a prekladat ip na jmeno pomoci host? Mozna to jde jeste jesdnoduseji, zkus man netstat.
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
31.5.2006 15:16 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Odpovědět | | Sbalit | Link | Blokovat | Admin
Použij cyklus for
for foo in $(kolona); do
  nejaky kod vyuzivajici $foo
done
Místo netstat | grep -m 14 tcp můžeš použít netstat -t.

A nakonec zkus napsat netstat -tW, příště doporučuji man netstat.
When your hammer is C++, everything begins to look like a thumb.
31.5.2006 15:51 Palo
Rozbalit Rozbalit vše Re: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky moc vsem za nakopnuti... nevedel/nebyl jsem si vubec jisty, jak vyuzivat promenne ziskane nejakym dotazem - ted uz vim, ze se to dela pomoci konstrukce "for" - do budoucna uz s necim takovym prudit nebudu ( pro me velmi cenna informace a navod ). S tim dotazem za pomoci tcpdump jsem chtel samo pouzit ve tvaru
echo "$(tcpdump -i ra0 |grep $1 | head -1)"
aby mi to vratilo jen jednu hodnotu. Idealni zpusob a plne dostacujici je pro me netstat -n... ip adresy uz myslim netreba dale prekladat na domenove nazvy za pomoci nslookup - usetrim tim systemove prostredky. Slo mi o to, ze neuplny domenovy nazev jak jsem to resil ja predtim, mi samozrejme byl na nic. Hlavne, ze uz taky vim, jak na vyuziti tech promennych dale ve skriptech ( pomoci for ). Vsem moc dekuji a preji pekny den! :-) P.
31.5.2006 17:11 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Myslím, že si nerozumime. Ta původní myšlenka na procházení paramtrů není sice dokonalá, ale v pricipu je správná. Aneb:
set $(prikaz)
while shift
do
prikaz $1
done
je korketni - jen bych ten shift přesunul hned za while. Když už není kam posouvat vrátí false a smyčka skončí, tak proč to dělat přes break. Funguje to podobně dost podobně jako ten for.
Chyba byla v tom, že tcpdump se nechová tak, že by vysypal seznam paketů, ale prostě poslouchá. Jinými slovy se to zasekne př jeho prvním zavolání a dál skript nic nedělá. Paramter $1 se předá správně jako echu. For to v tomhle případě nevyřeší. Není to problém předávání proměnných.
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
31.5.2006 17:15 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: cyklus s vyuzitim predane promenne v dalsim dotazu - nejde
Odpovědět | | Sbalit | Link | Blokovat | Admin
netstat -tW
If you hold a Unix shell up to your ear, you can you hear the C.

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.