Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Cendas 28 Prosince 2011, 09:44:23
-
Ahoj v tom scriptu pro conky mi nefungují ty proměnný.
V terminálu mi je to vypíše ale v conky ne.
#!/bin/bash
STATE_CITY=Czech_Republic/Liberec/Frýdlant~3076124
wget -O forecast.xml http://www.yr.no/place/$STATE_CITY/forecast.xml
wget -O hour.xml http://www.yr.no/place/$STATE_CITY/forecast_hour_by_hour.xml
FORECAST_FILE=forecast.xml
HOUR_FILE=hour.xml
CITY=`sed -n 's/ *<name>\(.*\)<.*>/\1/'p $HOUR_FILE`
COUNTRY=`sed -n 's/ *<country>\(.*\)<.*>/\1/'p $HOUR_FILE`
eval `sed -n 's/ *<location *\(.*"\) *\/>/\1/'p $HOUR_FILE`
LOCATION_LATITUDE=`printf "%.2f\n", $latitude`
LOCATION_LONGITUDE=`printf "%.2f\n", $longitude`
eval `sed -n 's/ *<sun.*T\(.*\) .*T\(.*\) * \/>/SUN_RISE="\1 SUN_SET="\2/'p $HOUR_FILE`
eval `sed -n 's/ *<time from=.*T\(.*\) .*T\(.*\) *>/VALID_FROM="\1 VALID_TO="\2/;41p' $HOUR_FILE`
eval `sed -n 's/<symbol *\(.*"\) *\/>/\1/;43p' $HOUR_FILE`
SIMBOL_NUMBER=$number
SIMBOL_NAME=$name
SIMBOL_VAR=$var
eval `sed -n 's/<precipitation *\(.*"\) *\/>/\1/;44p' $HOUR_FILE`
PRECIPITATION_VALUE=$value
PRECIPITATION_MINVALUE=$minvalue
PRECIPITATION_MAXVALUE=$maxvalue
eval `sed -n 's/<windDirection *\(.*"\) *\/>/\1/;46p' $HOUR_FILE`
WIND_DIRECT_DEG=$deg
WIND_DIRECT_CODE=$code
WIND_DIRECT_NAME=$name
eval `sed -n 's/<windSpeed *\(.*"\) *\/>/\1/;47p' $HOUR_FILE`
WIND_SPEED_MPS=$mps
WIND_SPEED_NAME=$name
eval `sed -n 's/<temperature *\(.*"\) *\/>/\1/;48p' $HOUR_FILE`
TEMPERATURE_UNIT=$unit
TEMPERATURE_VALUE=$value
eval `sed -n 's/<pressure *\(.*"\) *\/>/\1/;49p' $HOUR_FILE`
PRESSURE_UNIT=$unit
PRESSURE_VALUE=$value
ICON=`echo http://symbol.yr.no/grafikk/sym/b48/$SIMBOL_VAR.png`
wget -O icon.png $ICON
echo '${color 21EAE3}'"Předpověď od: "$VALID_FROM" - do: "$VALID_TO" "$COUNTRY
echo $CITY"("$LOCATION_LATITUDE" s.š., "$LOCATION_LONGITUDE" v.d.)"
echo " "$SIMBOL_NAME
echo " Východ: "$SUN_RISE
echo " Západ: "$SUN_SET
echo " Tlak: "$PRESSURE_VALUE" "$PRESSURE_UNIT
echo " Srážky: "$PRECIPITATION_VALUE" Max.: "$PRECIPITATION_MAXVALUE" Min.: "$PRECIPITATION_MINVALUE
echo " Vítr: "$WIND_DIRECT_CODE" "$WIND_SPEED_NAME" "$WIND_SPEED_MPS
echo " "$TEMPERATURE_VALUE" "$TEMPERATURE_UNIT
exit
-
Tak už jsem asi našel kde je chyba. :)
-
Ještě jeden dotaz šlo by nějak ze skriptu poslat na tuhle stránku:
http://translate.google.cz/#auto|cs|precipitation
slovo a zase načíst to přeložené do češtiny?
-
A není to trošku zbytečný posílat neustále dotazy na cizí server? Vytvořte si ve skriptu malé pole s překladem na které můžete odkazovat
area["precipitation"]="srazky"
..... a další
$WEATHER_COND = precipitation;
echo area[$WEATHER_COND]
treba,.....
-
Mě jde hlavně o překládání proměnných.
Třeba aby mě to přeložilo stav větru z Moderate breeze na Mírný vítr.
-
Ano to pole by mělo držet veškeré překlady eng -> cz, takže nebudeš muset každých 10 min posílat nějaký dotaz na GT
-
Zkusil jsem vytvořit to pole ale nefunguje to.
pole["Partly cloudy"]="Polojasno"
$SIMBOL_NAME = Partly cloudy;
echo pole[$SIMBOL_NAME]
pocasi.sh: 42: pole[Partly cloudy]=Polojasno: not found
pocasi.sh: 44: Partly: not found
pole[Partly cloudy]
-
#!/bin/bash
declare -A POLE
POLE["Partly cloudy"]="Částečně zataženo"
POLE[Sunny]="Slunečno"
POLE["Heavy rain"]="Husté pršení"
POLE[Clear]="Jastno"
AA="Heavy rain"
echo ${POLE[$AA]}
takhle by to mělo být ok (podmínkou je mít bash verze 4, myslím,...)
-
Taky nefunguje:
pokus.sh: 3: declare: not found
pokus.sh: 4: POLE[Partly cloudy]=Částečně zataženo: not found
pokus.sh: 5: POLE[Sunny]=Slunečno: not found
pokus.sh: 6: POLE[Heavy rain]=Husté pršení: not found
pokus.sh: 7: POLE[Clear]=Jastno: not found
pokus.sh: 11: Bad substitution
Verzi mám: GNU bash, verze 4.2.10(1)-release (x86_64-pc-linux-gnu)
-
Tak to asi bude chtit někoho zkusenejsiho s tímhle už neporadím
btw mě to jede:
etnyx@debian:~$ nano test2.sh
etnyx@debian:~$ chmod +x test2.sh
etnyx@debian:~$ cat test2.sh
#!/bin/bash
declare -A POLE
POLE["Partly cloudy"]="Částečně zataženo"
POLE[Sunny]="Slunečno"
POLE["Heavy rain"]="Husté pršení"
POLE[Clear]="Jastno"
AA="Heavy rain"
echo ${POLE[$AA]}
etnyx@debian:~$ ./test2.sh
Husté pršení
etnyx@debian:~$ bash --version
GNU bash, verze 4.1.5(1)-release (i486-pc-linux-gnu)
Copyright © 2009 Free Software Foundation, Inc.
Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl.html>
Toto je svobodné programové vybavení: máte právo jej měnit a šířit.
VEŠKERÉ ZÁRUKY chybí, jak jen zákon dovoluje.
EDIT: ještě jsem to zkusil na jiným systému (GNU bash, verze 4.2.20(2)-release (x86_64-unknown-linux-gnu)) a taky ok, btw mas tam opravdu bash?? třeba v sh declare není,...
-
Ahoj Tak ten překlad jsem vyřešil použítím sedu. :)
Ještě bych potřeboval upravit tenhle xml soubor
http://www.yr.no/place/Czech_Republic/Liberec/Fr%C3%BDdlant~3076124/forecast.xml
aby mě tam zůstali data vždy jen označené jako period="2"
Výsledek by měl vypadat takhle:
<time from="2011-12-31T12:00:00" to="2011-12-31T18:00:00" period="2">
<!-- Valid from 2011-12-31T12:00:00 to 2011-12-31T18:00:00 -->
<symbol number="3" name="Partly cloudy" var="03d" />
<precipitation value="0.0" />
<!-- Valid at 2011-12-31T12:00:00 -->
<windDirection deg="239.8" code="WSW" name="West-southwest" />
<windSpeed mps="3.6" name="Gentle breeze" />
<temperature unit="celsius" value="2" />
<pressure unit="hPa" value="1014.6" />
</time>
<time from="2012-01-01T12:00:00" to="2012-01-01T18:00:00" period="2">
<!-- Valid from 2012-01-01T12:00:00 to 2012-01-01T18:00:00 -->
<symbol number="4" name="Cloudy" var="04" />
<precipitation value="0.3" minvalue="0,2" maxvalue="0,5" />
<!-- Valid at 2012-01-01T12:00:00 -->
<windDirection deg="193.2" code="SSW" name="South-southwest" />
<windSpeed mps="5.3" name="Gentle breeze" />
<temperature unit="celsius" value="3" />
<pressure unit="hPa" value="1013.4" />
</time>
<time from="2012-01-02T12:00:00" to="2012-01-02T18:00:00" period="2">
<!-- Valid from 2012-01-02T12:00:00 to 2012-01-02T18:00:00 -->
<symbol number="9" name="Rain" var="09" />
<precipitation value="1.8" minvalue="1,4" maxvalue="2,3" />
<!-- Valid at 2012-01-02T12:00:00 -->
<windDirection deg="195.7" code="SSW" name="South-southwest" />
<windSpeed mps="7.5" name="Moderate breeze" />
<temperature unit="celsius" value="8" />
<pressure unit="hPa" value="1005.8" />
</time>
<time from="2012-01-03T13:00:00" to="2012-01-03T19:00:00" period="2">
<!-- Valid from 2012-01-03T13:00:00 to 2012-01-03T19:00:00 -->
<symbol number="4" name="Cloudy" var="04" />
<precipitation value="0.0" />
<!-- Valid at 2012-01-03T13:00:00 -->
<windDirection deg="220.5" code="SW" name="Southwest" />
<windSpeed mps="6.6" name="Moderate breeze" />
<temperature unit="celsius" value="4" />
<pressure unit="hPa" value="1016.7" />
</time>
<time from="2012-01-04T13:00:00" to="2012-01-04T19:00:00" period="2">
<!-- Valid from 2012-01-04T13:00:00 to 2012-01-04T19:00:00 -->
<symbol number="4" name="Cloudy" var="04" />
<precipitation value="0.0" />
<!-- Valid at 2012-01-04T13:00:00 -->
<windDirection deg="257.3" code="WSW" name="West-southwest" />
<windSpeed mps="9.7" name="Fresh breeze" />
<temperature unit="celsius" value="5" />
<pressure unit="hPa" value="1005.9" />
</time>
<time from="2012-01-05T13:00:00" to="2012-01-05T19:00:00" period="2">
<!-- Valid from 2012-01-05T13:00:00 to 2012-01-05T19:00:00 -->
<symbol number="12" name="Sleet" var="12" />
<precipitation value="2.8" />
<!-- Valid at 2012-01-05T13:00:00 -->
<windDirection deg="215.3" code="SW" name="Southwest" />
<windSpeed mps="4.8" name="Gentle breeze" />
<temperature unit="celsius" value="1" />
<pressure unit="hPa" value="997.4" />
</time>
-
Jde použít sed aby neupravoval jen řádek ale celí soubor?
Když to mám takhle tak mě to bere jen jeden řádek.
sed 's/.*\(period="2".*\)<\/time>.*/\1/' $FORECAST_FILE
-
Tak už jsem si s tím poradil. :)
Ještě bych potřeboval jestli je nějaký příkaz, když zadám datum tak aby mi napsal co je to za den.
například když zadám 2.1.2012 tak aby to napsalo úterý.
-
date -d"2012-1-2" +%A
akorát zejtra je pondělí, jestli tam chceš úterý tak si to budeš muset upravit :P
-
Dík to jsem chtěl, jsem se splet :D