Szkriptek: Python, Perl, Bash, ...

bash: while függvényben és azon kívül

Nem tudom miért van de néha keservesebb eghy jól működő scriptet összehoznom mint egy c programot. Néhány programot próbálok lelőni, scriptből és rájöttem hogy egy kódrészt tulajdonképpen állandóan, változatlanul használok, nosza legyen ez függvény:


kill_pid()
{
  CYCLE_COUNTER="."
  while [ -n "$PID_TO_KILL" -a "$CYCLE_COUNTER" != "...." ]
  do
    CYCLE_COUNTER="${CYCLE_COUNTER}."
    echo -n $CYCLE_COUNTER
    kill $PID_TO_KILL
    sleep 1
    PID_TO_KILL=`ps -ax -o pid | grep $PID_TO_KILL | grep -v 'grep'`
  done
  echo " done"
}

Egyszerúen be sem lép a ciklusba, ha kiíratom a ciklus előtt a $PID_TO_KILL értékét - kiírja mit kell. A $CYCLE_COUNTER értéke (első körben adott. Elkezdtem (kínomban) az idéző jelekkel variálni -n $PID_TO_KILL - az "-a" számára váratlan? Elvileg, szerintem az egész while utasításnak így is jónak kéne lenni:


  whiole [ -n $PID_TO_KILL -a $CYCLE_COUNTER != "...." ]

De így a "-a" -t nem akarja elfogadni. Szinte szóról-szóra azonos kód működött eddig, csak nem volt külön függvénybe. Mi sz'vathat itt engem?

környezeti változó(k) készítése

Debian Squeeze -t használok.
Próbálok, felhasználó globális "környezeti" változót létrehozni:


#!/bin/sh
WEBCAM_DEVICE="/dev/video0"
export WEBCAM_DEVICE
...
exit 0

Ha lefuttatom a scriptet, és utána kiadom a $echo $WEBCAM_DEVICE parancsot üres stringet kapok vissza (egy szál soremelés). Nem tudja valaki mit szúrok el?

IP cím utolsó szám kinyerése +parancssor

Sziasztok!

Windows alatt parancssorból szeretném kinyerni az IP címem utolsó számát.
netsh interface ip show config | findstr IP > ip.txt
IP-cím: 192.168.0.XX
tehát nekem az XX nek az értéke kellene. És ezt lementeném egy szövegfájlba.
Dos alatt sajna nem találtam cut parancsot. Külső program telepítése nem lehetséges.
Valakinek valami ötlete?

köszi

[megoldva] grep -o

Nagyon sok esetben kiválóan használható a grep -o, azaz csak egy-egy részletre keresni fájl(ok)ban.
Minden sor második és harmadik karaktereit le lehet-e így válogatni egy grep lekérdezéssel? (Perllel vagy két grep-pel (grep -o ^...|grep -o ..$ ) én is tudom, de egyetlen grep kifejezéssel?)

CSV fileba gyomlálás

Tiszteletem az uraknak,
egy szöveges csv állományban ahol a mezők opcionálisan idézőjelek között vannak (") néha egy szöveges mezőben is előfordulás az idézőjel.
Nem kell mondanom ezzel az egész feldolgozást padlóra küldve.
Íme egy példa ahol a 4. mezőben a "C" rész a hunyó:
"AAA";"BBBB";"D";"COFFEE "C" FUT.";1.;"USD";.00000000000;"USD";"7000";""

Egy lehetséges megoldás hogy lecserélem a problémás helyen (és csak ott) a `"` jelet pl -> `'`-re.
Pontosabban ahol nem `;"` így vagy `";` így jelentkezik plusz a sor vége és eleje (ahol úgy csak `"` önmagába fordul elö) kivétel a többi helyen cserélendő.
Na ezt meg lehet egy egy soros sed-del csinálni?

Köszönöm a tippeket előre is.
Üdv
MZ.

LOG script

Sziasztok!

A következőbe kérném segítségeteket: Lenne egy elég nagy log fileom (~350 MB átlagba a mérete), jellemzően ip címek vannak benne. Azt szeretném vele csinálni, hogy kiválogatni csak az ip címeket, megszámolni melyik cím hányszor fordul elő, s a 10 legtöbb sorral rendelkező ip címet sorrendbe (a legtöbb sorral rendelkező ip címet az első helyre s így tovább) egy fileba írni.

Tudtok ti erre valami kész megoldást, vagy mindenképp valami scriptet kell rá majd faragnom. Ha igen odáig elméletbe eljutottam, hogy mondjuk regexpes awk-val kiszedem az ip címeket, de ez után rögtök el is akadtam, hogy hogy fogom megszámolni melyik címből mennyi van, ezután meg gondolom sort-al sorrendbe lehetne állítani.

Segítségeteket előre is köszönöm!

Script kilövése nem öli meg az általa indított folyamatot. Hogy van ez?

Üdv! Van egy nagyon egyszerű kérdésem. Csináltam egy egyszerű valamit ami a háttérben futna, maga a program az egy végtelen ciklus, és beraktam egy shell scriptbe, ami a biztonság kedvéért szintén egy végtelen ciklus, és a programot indítja újra.

pl: teszt.sh
while [ 1 ]; do /valahol/teszt.py; done

teszt.py

#!/usr/bin/env python
while 1: print "valami"

namost ha én ezt le akarnám állítani úgy, hogy killall teszt.sh, akkor a shell script megáll, de a program fut tovább
nem akartam pidek lementésével szórakozni, ill sok időt szánni a dologra (ezért írtam így meg).

Namost, megoldottam a problémát azzal, hogy a python program letárolja a saját pid-jét, és azt is megölöm, csupán kíváncsi vagyok, hogy miért nem hal meg a programom "magától", ha az azt indító folyamat meghal? Azért vagyok kíváncsi, mert máskor pont azt tapasztaltam, hogy folyamatok sora hal meg, ha a szülő kiesik, pl kilövöm a terminált, akkor a benne futó alkalmazás nem fut tovább (még a háttérben& indított sem)

[megoldva] xargs argumentumának többszöri felhasználása

Azt szeretném elérni, hogy az xargs által megkapott argumentumot többször is tudjam használni.
Egyelőre ezt csak külön fájl révén tudom megoldani, azaz van egy segédfájlom:
grep $1 fajlom > kimenet$1
és ezt hívom meg így: cat listam|xargs -iQ sh segedfajl Q
Nem lehetne ezt egy sorban megoldani? (A cat listam|xargs -iQ grep Q fajlom > kimenetQ nem jó, mert ez egyetlen kimenetQ fájlt gyárt)

Fájlok szűrése lista alapján

Sziasztok!

Sajnos már régóta nem írtam bash scripteket, ezért kérném a segítségeteket a következő problémához:

Egy könyvtárban van nagyon sok termékfotóm, ilyen formában elnevezve:

cikkszam.jpg
(00001.jpg, 00002.jpg ...)

Illetve van egy cikkek.txt fájlom, amiben fel van sorolva pár cikkszám, soronként mindig 1-1:

00001
00002
...

Azokat a fényképeket kéne kimásolnom egy másik könyvtárba, amelyek neve szerepel a cikkek.txt-ben. Mivel ezt a feladatot később sokszor meg kell majd ismételnem, ezért praktikus lenne egy bash script amit felhasználhatok máskor is. :)

Előre is köszönöm a segítséget.

A.