Szkriptek: Python, Perl, Bash, ...

változók láthatósága - bash

Kedves Fórumozók!

A következő shell scriptet faragom éppen, de nem akar úgy működni, ahogy azt én szeretném:


OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3

append() {
	if [ -z "$1" ]; then
		echo "$2"
	else
		echo "$1; $2"
	fi
}
FS_USAGE=$( df -k | /usr/xpg4/bin/grep -E "swap|^/dev" | awk '{print $6,$5;}' )

FS_PAIRS=$( echo "$FS_USAGE" | tr -d % )

WARNINGS=""
CRITICALS=""

echo "$FS_PAIRS" | while read FS US; do
	echo "$FS:$US"
	if [ "$US" -gt 5 ]; then
		echo "FIRED!"
		CRITICALS=$( append "$CRITICALS" "$FS: $US%!!!" )
		echo "$CRITICALS"
	else
		if [ "$US" -gt 85 ]; then
			WARNINGS=$( append "$WARNINGS" "$FS: $US%" )
		fi
	fi
done
echo "/${CRITICALS}/"
echo "/${WARNINGS}/"
echo "/$CRITICALS/"
echo "/$WARNINGS/"

if [ "$CRITICALS" ]; then
	echo "CRITICAL: $CRITICALS"
	exit $CRITICAL
fi

if [ "$WARNINGS" ]; then
	echo "WARNING: $WARNINGS"
	exit $WARNING
fi

echo "OK"
exit $OK

A kimenet pedig:


/:3
/boot:10
FIRED!
/boot: 10%!!!
/var:11
FIRED!
/boot: 10%!!!; /var: 11%!!!
//
//
//
//
OK

A problémám pedig konkrétan az, hogy a CRITICALS, és WARNINGS változóba szeretném gyűjteni az adott felhasználási küszöbnél magasabb telítettségű FS-eket, és a ciklus vége után a szkript mintha "elfelejtené" a változó tartalmát. Ez valószínűleg azért lehet, mert egy azonos nevű lokális változót hoz létre a script, és a blokk vége után az értéke elveszik.
De itt nem függvényről, vagy szubrutinról van szó, és a változót direkt létrehoztam még a ciklus előtt. Amúgy is egy blokkon belül alapból nem kellene lokális változót létrehoznia, csak akkor, ha előtte a local kulcsszót használom. Nemde? Hogy van ez?

Konfiguracios fajl valtoztatasa

Udv!

Egy konfigaricios fajlban szeretnek egy valtozot kicserelni, de mivel sajat, augeas nem ismeri fel, igy mas megoldasra lenne szukseg.

Maga a fajl igen egyszeru szerkezetu:


[section]
name1 = value1
name2 = value2
...

, de adott esetben a [section] is elhagyhato. A

name1

megvaltoztatasahoz keresek valamilyen programot. Puppethez lenne amugy.

Koszi az otleteket.

biztonsagi mentes NAS-ra , elozo heti mentes torlesevel

Sziasztok!

Keszitettem egy szkriptet , ami automatikus menti a home konyvtarakat heti szinten , egy NAS-ra!

A szkript lenyege , hogy minden heten mentse a home konyvtarakat tarolva , ugy , hogy az elozo heti mentest torolje automatikusan!

Odaig mar sikerült eljutnom , hogy mentse a home-konyvtarakat tarolva vasarnap hajnali utemezessel , csak sajnos az automatikus torlest valamiert nem csinalja!

A szkript: http://pastebin.com/4BiTJF5H

Ha esetleg ra tudnatok nezni , es leirni, hogy mi lehet a problema , illetve , hogyan tudnam azt orvosolni , azt nagyon megköszönnem!

Köszönöm előre is a segítséget!

Bye!

[megoldva] Perl nagybetűsítés

Adott egy szövegfájl, amelyben a pont+szóközt követő (azaz a mondatkezdő) betűt szeretném nagybetűsíteni egy PERL szkripttel. Pl. ezt:
valamilyen. irányba visz. és nem. és még ez sem.
Azonban sem latin2, sem utf8 kódolással nem tudom elérni a célt, hanem csak ilyet kapok:
valamilyen. Irányba visz. és nem. és még ez sem.
Az általam használt kódrészlet:
perl -p -w -e 's/\. (.)/. \U$1/g' myfile
Próbáltam a use utf8; vagy a binmode STDOUT, "utf8";-at is, de nem jártam sikerrel az ékezetes betűk (pl. é) nagybetűsítésénél.
Tud valaki javasolni egy alkalmas PERL egysorost a fenti célra?

[megoldva] Google Drive backup script

Azt szeretném elérni, hogy a Google Drive fiókomba elmentődjenek bizonyos fileok automatikusan.
Ubuntu szerverről van szó, tehát nincs grafikus felület. Igazából egy bash scriptre gondoltam, ami bejelentkezik a google drive fiókba, majd oda feltölt fileokat.
Egyetlen megoldást találtam, ami egy python scripttel oldja meg ezt a feladatot és nekem a python is nagyon megfelelne.
Ezen az oldalon van ez a megoldás: http://info4admins.com/google-docs-backup-script-automatic-daily-backup/
Ez ha működne, akkor számomra tökéletes lenne, a cron-al remekül lehetne időzíteni is, és roppant könnyen alakítható az igényekhez. Viszont...
2 gondom van vele. Első, hogy ez nem feltölt a google drive fiókba, hanem onnan lement a gépünkre. Bár gondolom talán arra is meg lehet kérni, hogy ezt fordítva csinálja.
A másik gondom pedig az, hogy látszólag szépen bejelentkezik (vissza is jelez, hogy sikerül), majd pedig onnan nem tölt le semmit. Majd boldogan visszajelez, hogy minden rendben volt.
Szóval ha tudtok valamilyen megoldást, vagy tudjátok mi lehet a hibája annak a módszernek amit linkeltem, akkor írjatok vissza.

Python, openCV, web

Van egy szoftver, ami python-ban íródott, openCV-vel dolgoz fel megadott képeket, alapjában véve egy desktop alkalmazás. Megadott paraméterek beállítása után (gui) megmutat egy képet. Úgy kellene módosítani az alkalmazást, hogy egy távoli gépen fut, és az eredményül kapott képet le lehessen kérni böngészőn keresztül. Későbbiekben esetlegesen a paraméterezést is böngészőből kellene megoldani.

Bevallom nem kerestem rá még google-ön. Hátha akadnak itt akik már csináltak hasonlót. Django-ról már hallottam, de nem vagyok webfejlesztő. Szóval ti hogyan oldanátok meg ezt a problémát?

Kieg.: http://hup.hu/node/123765#comment-1595126

case ")" esac

Nem ennél a kódnál, hanem egy hosszabb lélegzetűnél némi átírás után hosszú ")" vadászat volt, hogy vajh' melyiknek veszett el valahogy a párja, de nem.

A probléma az alábbi példában:

var='---'
case "$1" in
  ok)
    echo -n '('; echo -n $var; echo ')' # hosszú
    exit;;
  fail)
    echo '('$var')' # a kérdéses sor
    exit;;
esac

A "kérdéses sor" gedit-ben a bezárójel után string kezdetet értelmez.
Futtatáskor vagy végrehajtja, vagy hibával kiszáll - unexpected ")" - ez rendszerindításonként heurisztikus.
Ha nem gömbölyű bezárójel van, akkor nincs gond.

A "case - esac"-on kívül nem volt ilyen probléma.
Most már bévül sem lesz, mert "hosszú" beírást fogok alkalmazni ahol szükséges.

Python send_mail - 554 - SMTPRecipientsRefused

Udv!

Van egy teljesen ujonnan telepitett gep, amire eppen csak egy python kerult fel, meg egy legegyszerubb postfix install.

Egy egyszeru levelet szeretnek vele elkuldeni, de allandoan hibauzenetbe utkozom:


from django.core.mail import send_mail
send_mail('aaa', 'bbb', 'from@localhost', ['user@external.hu'])

. A hibauzenet:


Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/django/core/mail/__init__.py", line 61, in send_mail
    connection=connection).send()
  File "/usr/lib/python2.6/dist-packages/django/core/mail/message.py", line 248, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/usr/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 92, in send_messages
    sent = self._send(message)
  File "/usr/lib/python2.6/dist-packages/django/core/mail/backends/smtp.py", line 110, in _send
    email_message.message().as_string())
  File "/usr/lib/python2.6/smtplib.py", line 709, in sendmail
    raise SMTPRecipientsRefused(senderrs)
SMTPRecipientsRefused: {'user@external.hu': (554, '5.7.1 <user@external.hu>: Relay access denied')}

, illetve valamelyik mail logban:


Apr 16 10:48:48 tkt postfix/smtpd[4886]: connect from tkt[217.112.142.235]
Apr 16 10:48:48 tkt postfix/smtpd[4886]: NOQUEUE: reject: RCPT from tkt[217.112.142.235]: 554 5.7.1 <root@tavkuldonc.hu>: Relay access denied; from=<from@localhost> to=<user@external.hu> proto=ESMTP helo=<tkt>
Apr 16 10:48:48 tkt postfix/smtpd[4882]: lost connection after RSET from tkt[217.112.142.235]
Apr 16 10:48:48 tkt postfix/smtpd[4882]: disconnect from tkt[217.112.142.235]

.

Parancssorbol

 echo 'x' | mail user@external.hu

csont nelkul megy, tehat a cimzett megkapja a levelet.

Eleg sok forumot olvastam google- n errol, de nem sokra jutottam. Valakinek van otlete, hogy mi lehet a problema? 25- os portot sniffelve semmi nem jelenik meg... .

Koszi a valaszokat.

Bash fileban keresés

Sziasztok!

Előre szólok, nem vagyok valami nagy szkriptelő, csak nemrég kezdtem.
Bash-ben szeretném egy fájlból kiszedni a $START és $END közötti stringeket(ezek a stringek egyébként minden esetben számok).
Itt egy példafájl: http://pastebin.com/7kBpyAcP
...nowrap align="left">Színes1030< t ...
Legyen mondjuk $START="Színes" és $END="<" nekem a hasznos infó a 1030.

Jelenleg így szedem ki: EREDMENY=`sed -n "1,/$START/!{ /$END/,/$START/!p; }" in.tmp` de ez csak akkor működik ha csak egyszer szerepel a $START az in.tmp-ben, hogyan kéne csináljam, hogy ki szedjem az összes előfordulását $START*$END egy tömbbe vagy fájlba.

szerk: párszor beleszerkesztettem, mert a < code > valamiért nem akart működni.