Portál AbcLinuxu, 27. dubna 2024 06:34


Dotaz: Zpracovani crontab v bash scriptu

20.5.2010 09:31 renox
Zpracovani crontab v bash scriptu
Přečteno: 311×
Odpovědět | Admin
Z crontabu si prectu */10 * * * * /usr/local/bin/bash_script Potrebuji dostat jednotlive polozky do promennych (minute, hour, day_of_week...) nebo do pole. Je to pro me mission impossible, bud se mi wildcard preklada na soubory v adresari nebo pokud se snazim retezec rozstrhat CUTem po mezerach, tak mi druhou a treti polozku vrati stejnou... Nejaky napad, jak toho docilit? Diky za napady

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.5.2010 11:17 Franta Hanzlik
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
jestli to má být do proměnných/pole shellu sh/bash, tak se asi přímo vnucuje

POLE=$(RADKA_CRONTABu)

dál viz man stránky bashe (Advanced Bash Scripting Guide, abs-guide, přelétnout také není k zahození).
20.5.2010 11:35 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Zřejmě jste se uklepl. $(...) je jiný zápis pro `...` (který má mj. tu výhody, že lze vnářet.

Nejspíše jste měl na mysli:
POLE=(RADKA_CRONTABu)
ksh ještě umí vtipný zápis:
set -A <pole> <obsah>
Ale bash ne.
20.5.2010 12:39 Franta Hanzlik
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Jasně, omlouvám se za matení... Dumal jsme zda nevrazit dolar jako rozvoj RADKA_CRONTABu, a dopadlo to takhle ;)
20.5.2010 15:26 renox
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Problemem pro neni ani tak kam to ulozit, ale jak to nasledne do dalsich promennych po kouskach nacist.
POLE=(*/6 * * * *	/usr/local/bin/script /home/user/config/S2C.conf)
echo ${POLE[0]}
echo ${POLE[1]}
echo ${POLE[2]}
vypisuje:
*/6
afdfs.txt.msg
archiv.zip
hvezdicka je problem a nevim, jak to obejit
20.5.2010 15:38 marek
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Dobry den.

Zkuste uvozovky.

Marek
20.5.2010 15:54 Franta Hanzlik
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
"set -f" zakáže rozvoj cesty.
20.5.2010 15:56 NN
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Ta hvezdicka je problematicka, ale /etc/crontab pouziva TAB jako separator, takze si pomuzes takto:
cat /etc/crontab | grep \*  | cut -f 4
NN
Řešení 1× (renox (tazatel))
20.5.2010 15:59 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Protože shell to rozšiřuje. Jak psal kolega. Možná než uvozovky je jednodušší "escape" extra znaku, než to začnete zpracovávat. třeba překlad pomocí: sed -e 's#\([?*$]\)#\\\1#g'.

No a pak je tady ještě otázka. Kam tím vším míříte, jestli by to třeba nebylo lepší celé to rovnou směřovat do awk.
21.5.2010 09:32 renox
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
sed -e 's#\([?*$]\)#\\\1#g'
to je presne co jsem potreboval, ted uz se s tim da bez problemu pracovat. Moc dekuji
20.5.2010 16:09 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nie je problem v * a inych divokych znakoch, ale ze nepouzivas uvodzovky. Bezpecna strategia je, ze uvodzovky sa pouzivaju vzdy, okrem pripadov, ze je velmi dobry dovod ich nepouzit. Az budes guru, tak mozes zacat pouzivat uvodzovky iba tam, kde su fakt nutne.

Dokaz, ze * nie je problem nacitat do premennej:
cat /etc/crontab |
while read a b c d e f g h; do
  echo ="$a" ="$b" ="$c" ="$d" ="$e" ="$f" ="$g" ="$h"
done
If you hold a Unix shell up to your ear, you can you hear the C.
20.5.2010 18:36 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: Zpracovani crontab v bash scriptu
To "escapování" jsem výše zmiňoval, protože pro daný postup zrovna uvozovky moc vhodné nejsou. Když už budu hledat konce polí, aby jednotlivé položky "zauvozovkoval", tak už to rovnou mohu rozebírat do toho pole. Ale:
pole=(hodnota1 ... hodnotaN .... nebo_promenna)
není to samé, co:
pole=("hodnota1 ... hodnotaN .... nebo_promenna")
S tím druhým jsme si stran krájení pomocí (...) moc nepomohli. ;)

Jinak samozřejmě to, co píšete jako obecná poučka od věci není, akorát ještě s doplňkem, raději "${var}"

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.