Portál AbcLinuxu, 29. července 2025 13:18


Dotaz: Bash - přístup k mysql

1.2.2007 22:26 Zmije
Bash - přístup k mysql
Přečteno: 352×
Odpovědět | Admin
Hezký den. Na routeru se momentálně snažím vytvořit skript v bashi, který každý den zkontroluje datum a pokud je nový měsíc, tak ho aktualizuje v databáze mysql. Tabulka měsíce je jednoduchá id,mesic(varchar) Snažím se využít této konstrukce
mysql -N -D webconf -u root -e 'update mesice set mesi='$mesic' where id=2'
našel sem ji tu v některé starší diskusi. Dostanu tuhle hlasku
line 14: [: mesic: integer expression expected
pokud místo proměnné použiju přímo hodnotu, tak to funguje bez problémů. Jakým způsem by se dalo pracovat s mysql v bashi?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 1.2.2007 23:04 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bash se pokouší interpretovat obsah $mesi. Použij uvozovky:
mysql -N -D webconf -u root -e "update mesice set mesi=$mesic where id=2"
Hello world ! Segmentation fault (core dumped)
Fuky avatar 1.2.2007 23:20 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
mysql -N -D webconf -u root -e "update mesice set mesi='$mesic' where id=2" ;-)
1.2.2007 23:34 wosambo | skóre: 5
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
zprvu me tohle napadlo taky, ale pak jsem to odzkousel a ejhle, v mysql muzu varchar i text updatovat integerem, spis, jak jsem napsal nize, by autor otazky mel uvest vice ze sveho skriptu.
1.2.2007 23:37 wosambo | skóre: 5
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
aha, ze by ten radek 14 byl ten vyraz s mysql uzavreny do hranatych zavorek? pak uz mlcim ;)
1.2.2007 23:40 wosambo | skóre: 5
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
aha. ale to vlastne uz teprv nejde, to by chudak [ nevedel, ci je. primlouvam se znovu za vetsi poodhaleni tajemneho radku 14, co ze je to tomu prikazu [ predhozeno.
1.2.2007 23:32 wosambo | skóre: 5
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mam takovej dojem, ze problem nebude v uvedenem radku s prikazem mysql, ale v pouziti prikazu [ (ekvivalent prikazu test), kde to pozaduje integer a ne to, co tam misto integeru je. Ale to by chtelo uvest bud cely ten skript a nebo aspon ten radek 14.
9.2.2007 00:06 Zmije
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
Omlovám se všem za zbytečný dotaz, problém byl opravdu mimo řádek se čtením z DB. Totiž DB používám delší dobu, takže sem ji musel trochu poupravit nyní vypadá takto: id(auto increment, primary key..) mesic (varchar) mesicnum (varchar). Do mesicnum sem uložil listopad místo 2005/11 a o pár řádků dál sem to chtěl porovnávat jako číslo a vtom byl ten problém. Posílám vám alespoň hotový skript, múžete si rejpnou (vím že je to paskvil).
#! /bin/bash
#spousteno cronem kazde 3 hodiny 
echo "######################### SYNCH - START ###########################################"
ntpdate ntp.cesnet.cz

##############################Vlozeni noveho mesice#####################################
#zjisteni aktualniho(posledniho-Last) mesice LMounth
LMounth=$(date +%m)
LMounth=${LMounth#0}

#osetreni pokud mesic zacina 0 ;je potreba regulerni cislo 
LMounth=${LMounth#0}

#zjisteni aktualniho(posledniho-Last) roku LYear
LYear=$(date +%Y)
LDate=$LYear$LMounth

#z DB vyber nejvyssi datum a porovnej jestli neni mensi nez aktualni, v pripade ze je pridej mesic
zaznam=$(mysql -N -D webconf -u root -e "select mesice.id,mesice.mesicnum from mesice
 join (select max(mesice.mesicnum)as mesicmax from mesice)as nejvyssi on mesice.mesicnum=mesicmax")
mesicid=${zaznam%%$'\t'*}
zaznam2=${zaznam#$mesicid}
rok=${zaznam2%%/*}
rok=${rok#*$'\t'}

mesic=${zaznam2#*$rok/}
Mounth=${mesic#0}
Year=$rok

while [ "$Year$Mounth" != "$LYear$LMounth" ]; do
Mounth=$((Mounth + 1))
if [ "$Mounth" -gt 12 ]; then
  Year=$((Year+1))
  Mounth=1
fi
mesicid=$((mesicid+1))

#slovni zapis mesice
##definice pole SMesic
SMesic=( nultý leden únor březen duben květen červen červenec srpen září říjen listopad prosinec)

mesicnum=$(echo $Year'/'$Mounth)
if [ "${#Mounth}" = 1 ];then
mesicnum=$(echo $Year'/0'$Mounth)
fi

# mysql -N -D webconf -u root -e "update mesice set mesic='${SMesic[$Mounth]} $Year', mesicnum='$mesicnum' where id='$mesicid'"
mysql -N -D webconf -u root -e "insert mesice (mesic,mesicnum) values ('${SMesic[$Mounth]} $Year','$mesicnum')"

done
echo "######################### SYNCH - HOTOVO ##########################################"
9.2.2007 08:54 Ash
Rozbalit Rozbalit vše Re: Bash - přístup k mysql
To jste sem neměl dávat, teď se lidi budou ptát kdo vás nutí k takovýmhle ..vylomeninám :)

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.