abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 7
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 7
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (11%)
 (2%)
 (73%)
 (3%)
 (10%)
Celkem 387 hlasů
 Komentářů: 31, poslední včera 19:19
Rozcestník
Reklama

Dotaz: basch script a podmínka

24.5.2011 19:12 Martin
basch script a podmínka
Přečteno: 262×

Dobrý den, potřeboval bych poradit se scriptem. Mám script pomocí kterého do souboru zapíšu [OK]. Pokud je tato podmínka splněna tak se vše ukončí se zápisem do logu. Pokud místo "echo "[OK] 2011-05-24 18:23:50" > $LOGNAME" zadám "echo "[OOOK] 2011-05-24 18:23:50" > $LOGNAME, tak vše taky proběhne tak jak má a zapíše se do error logu.

Potřeboval bych udělat to aby když bude vše OK, tak aby se mi spustil ještě jedena část a to konkrétně toto: echo "[PAIR] 2011-05-24 18:23:50" > $LOGNAME2 ale jen v případě toho že předchozí podmínka bude OK. Jinak ať se vše okončí tím že se zapíše do error logu error, ale logname2 se nevytvoří.

 

cat test.sh
#!/bin/bash

COMPANY="Test"
SLEEP="2"
TRIES="3"

# let it "as is" until you know what you're doing
SCRIPTNAME="$0"
SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd)
LOGNAME="$SCRIPTPATH/log/stop_$$.log"
LOGNAME2="$SCRIPTPATH/log/pair-_$$.log"
LASTSTATUS="$SCRIPTPATH/log/laststatus.log"
ERRLOGS="$SCRIPTPATH/log/errors"
OKLOGS="$SCRIPTPATH/log/allright"
COUNT="0"


checklog(){
if [ ! -f $1 ] ; then
return 1
elif [ $(tail -n 1 $1 | grep -c '^\[WARNING\]') -eq 1 ] ; then
return 2
elif [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 0 ] ; then
return 1
else
return 0
fi
}

# better to run as www user and with mutt installed
[ -d $ERRLOGS ] || mkdir -p $ERRLOGS
[ -d $OKLOGS ] || mkdir -p $OKLOGS

while [ $COUNT -lt $TRIES ]; do
if ! checklog $LOGNAME ; then

# real stop
echo "[OK] 2011-05-24 18:23:50" > $LOGNAME

# take some sleep after unsuccessful run
if [ $COUNT -gt 0 ] ; then
sleep $SLEEP
fi
# raise counter
COUNT=$((COUNT + 1))
else
# break counter
COUNT=$((TRIES + 1))
fi
done

[ -f $LOGNAME ] && TAIL=$(tail -n1 $LOGNAME)

# alert mail in case of any problem (and exit)
if ! checklog $LOGNAME ; then
echo -e "$COMPANY stop was not proceeded properly: $TAIL"  gzip -9 $LOGNAME
gzip -9 $LOGNAME
[ -d $ERRLOGS ] && mv $LOGNAME.gz $ERRLOGS/$(date +%Y%m%d_%H%M).gz
echo "$TAIL" > $LASTSTATUS
exit 0
fi

# delete logfile in the end of successful run
if [ -f $LOGNAME ] ; then
gzip -9 $LOGNAME
[ -d $OKLOGS ] && mv $LOGNAME.gz $OKLOGS/$(date +%Y%m%d_%H%M).gz
fi

# "OK mail" in case of successful run after previous error run
if ! checklog $LASTSTATUS ; then
echo -e "$COMPANY stop is all right now.\n\nScript exited with [OK] string. Number of tries: $TRIES. Here is last line from script: $TAIL"
fi

# log last output line to statusfile for test and "OK mail" eventually
echo "$TAIL" > $LASTSTATUS

exit 0

Odpovědi

24.5.2011 21:12 Mercuriuz | skóre: 16 | blog: Mercuriuz | V hospodě =)
Rozbalit Rozbalit vše Re: basch script a podmínka
nevím jestli sem úplně pochopil co potřebuješ, ale takhle by to mělo fungovat n?
cat test.sh 
#!/bin/bash
COMPANY="Test"
SLEEP="2"
TRIES="3"

# let it "as is" until you know what you're doing
SCRIPTNAME="$0"
SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd)
LOGNAME="$SCRIPTPATH/log/stop_$$.log"
LOGNAME2="$SCRIPTPATH/log/pair-_$$.log"
LASTSTATUS="$SCRIPTPATH/log/laststatus.log"
ERRLOGS="$SCRIPTPATH/log/errors"
OKLOGS="$SCRIPTPATH/log/allright"
COUNT="0"


checklog(){
if [ ! -f $1 ] ; then
return 1
elif [ $(tail -n 1 $1 | grep -c '^\[WARNING\]') -eq 1 ] ; then
return 2
elif [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 0 ] ; then
return 1
else
return 0
fi
}

# better to run as www user and with mutt installed
[ -d $ERRLOGS ] || mkdir -p $ERRLOGS
[ -d $OKLOGS ] || mkdir -p $OKLOGS

while [ $COUNT -lt $TRIES ]; do
if ! checklog $LOGNAME ; then

# real stop
echo "[OK] 2011-05-24 18:23:50" > $LOGNAME
echo "[PAIR] 2011-05-24 18:23:50" > $LOGNAME2

# take some sleep after unsuccessful run
if [ $COUNT -gt 0 ] ; then
sleep $SLEEP
fi
# raise counter
COUNT=$((COUNT + 1))
else
# break counter
COUNT=$((TRIES + 1))
fi
done

[ -f $LOGNAME ] && TAIL=$(tail -n1 $LOGNAME)

# alert mail in case of any problem (and exit)
if ! checklog $LOGNAME ; then
echo -e "$COMPANY stop was not proceeded properly: $TAIL"  gzip -9 $LOGNAME
gzip -9 $LOGNAME
[ -d $ERRLOGS ] && mv $LOGNAME.gz $ERRLOGS/$(date +%Y%m%d_%H%M).gz
echo "$TAIL" > $LASTSTATUS
exit 0
fi

# delete logfile in the end of successful run
if [ -f $LOGNAME ] ; then
gzip -9 $LOGNAME
[ -d $OKLOGS ] && mv $LOGNAME.gz $OKLOGS/$(date +%Y%m%d_%H%M).gz
fi

# "OK mail" in case of successful run after previous error run
if ! checklog $LASTSTATUS ; then
echo -e "$COMPANY stop is all right now.\n\nScript exited with [OK] string. Number of tries: $TRIES. Here is last line from script: $TAIL"
fi

# log last output line to statusfile for test and "OK mail" eventually
echo "$TAIL" > $LASTSTATUS

exit 0
priste to prosim dej jako formatovanej kod, lip se to pak cte ;-)
Linux users everywhere, raise your keyboards into the air, we´re warriors, warriors of the world.
24.5.2011 21:20 Martin
Rozbalit Rozbalit vše Re: basch script a podmínka
ne to není ono co potřebuji, potřebuji aby se to druhé echo vypsalo jen v případě že ta první podmínka bude OK. Pokud dopadne špatně tak aby se to druhé echo vůbec nezapsalo.
24.5.2011 22:07 Mercuriuz | skóre: 16 | blog: Mercuriuz | V hospodě =)
Rozbalit Rozbalit vše Re: basch script a podmínka
specifikuj prosim tu "prvni podminku"
Linux users everywhere, raise your keyboards into the air, we´re warriors, warriors of the world.
24.5.2011 21:30 NN
Rozbalit Rozbalit vše Re: basch script a podmínka
if ! checklog $LOGNAME ; then
Mam pocit, ze tahle podminka vubec nenastane, jelikoz funkce checklog vzdy vrati hodnotu a tudiz je vzdy true ,ale mozna se pletu.
else
# break counter
COUNT=$((TRIES + 1))
Zaprve na co cekat (?) a zadruhe je jednoduzsi pouzit
break
Btw, proc vubec pouzivat ciklus, kdyz stejne kontrolujes jen posledni radek ?
# better to run as www user and with mutt installed
Really ?
# alert mail in case of any problem (and exit)
if ! checklog $LOGNAME ; then

# "OK mail" in case of successful run after previous error run
if ! checklog $LASTSTATUS ; then
Proc provadet tu samou vec trikrat, kdyz se da udelat jen nednou ?
SCRIPTNAME="$0"
TRIES="3"
Na co pouzivat promenne, kdyz je pouzijes jen jednou ?

silenost,

NN

PS: pouzivet tag pre diky..
24.5.2011 22:36 NN
Rozbalit Rozbalit vše Re: basch script a podmínka
SCRIPTPATH=$(cd ${SCRIPTNAME%/*} && pwd)
Coze? Tak takhle urcite ne..

NN
25.5.2011 05:34 Ash | skóre: 53
Rozbalit Rozbalit vše Re: basch script a podmínka
Podmínka ! checklog foo nastane v závislosti na návratové hodnotě funkce checklog (nula versus nenulová hodnota).

Proměnné nejí něco, co "nahrazuje věci které se dělají víckrát". Proměnné jsou i symbolická jména a rovněž mohou plnit funkci konfiguračních proměnných.

25.5.2011 06:03 Ash | skóre: 53
Rozbalit Rozbalit vše Re: basch script a podmínka
Vidím že tam nikde nepoužíváte žádné stavové proměnné, rozhodně checklog by bylo lepší volat jen jednou, možná by pomohlo něco jako:
company_exited_flawlessly=false

if checklog $LOGNAME ; then
company_exited_flawlessly=true
else
company_exited_flawlessly=false
fi

(nebo víc skripťácky:
checklog $LOGNAME && company_exited_flawlessly=true
)

if $company_exited_flawlessly; then
...
else
...
fi
a to i v jiných místech.

Pro ukončení smyčky lépe použít break (jak radí NN).

Funkci checklog bych zlidštil a asi i nějak přejmenoval, aby už její název evokoval, jestli se v případě úspěchu očekává 0 nebo spíš 1. Dost to pomáhá čitelnosti, zvlášť pokud výsledek ještě navíc negujete (! checklog). Pokud by takových funkciček a podmínek bylo víc, umí to pokazit den.
log_ok(){
if [ -f $1 ] ; then
  if [ $(tail -n 1 $1 | grep -c '^\[OK\]') -eq 1 ] ; then
     return 0
   fi
fi
return 1
}

log_ok $LOGNAME && company_exited_flawlessly=true
P.S. Jestli jsem funkci checklog někde použil obráceně tak se omlouvám, připadá mi že ji máte opačně, ale možná že ne, takhle po ránu bych fakt potřeboval spíš log_ok $LOGNAME && company_exited_flawlessly=true

Založit nové vláknoNahoru

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

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.