Strona 1 z 1
[Solved] Skrypt liczący różnicę czasu.
: 11 lut 2009, 20:22
autor: zet120
Plik, który służy jak przykład wygląda tak:
jak, czym najprościej odjąć te godziny aby otrzymać długość dnia wyrażoną w godzinach i minutach?
Odp: W jaki sposób odejmować zmienne?
: 11 lut 2009, 20:51
autor: Dwimenor
łatwiej na minutach policzyć. Zamień to "7:08" na minuty od północy ( 428 ), tak samo dla zachodu. Potem odejmij minuty (zachód-wschód). Wynik przelicz na godziny i minuty.
Odp: W jaki sposób odejmować zmienne?
: 11 lut 2009, 21:12
autor: leon1313
Za dużo kombinowania: jeśli odejmiesz minuty, i wyjdzie ci mniej niż 0, to dodaj do nich 60 i odejmij 1 od różnicy w godzinach.
jeśli h1:m1 to wschód, a h2:m2 to zachód to:
Kod: Zaznacz cały
m3=m2-m1;
jeśli m3<0 to m3=m3+60 i h2=h2-1 ; koniec "jeśli"
h3=h2-h1;
Różnica to h3:m3

Odp: W jaki sposób odejmować zmienne?
: 12 lut 2009, 14:23
autor: zet120
Hmmm?

A czy mógłbym prosić o odpowiedź zrozumiałą dla przeciętnego "kilkacza"?
Czyli innymi słowy znajdzie się dobra dusza, która jest w stanie skrobnąć odpowiedni skrypt czy też polecenie?
P.S.
Google w tej materii "proponuje" mi kurs programowania w różnych językach, ale to chyba nie dla mnie.
Odp: W jaki sposób odejmować zmienne?
: 12 lut 2009, 14:35
autor: mozg07
A w czym? Z kontekstu domyślam się, że chodzi o basha, ale pewien nie jestem. I co dokładnie dostaję na wejściu. Taką linię:
czy może po prostu:
czy jeszcze inaczej?
Odp: W jaki sposób odejmować zmienne?
: 12 lut 2009, 14:53
autor: Struchu
To ja krótko i perlowato:
Kod: Zaznacz cały
#!/usr/bin/perl -w
my $wejscie = <STDIN>;
if($wejscie =~ /.*?(\d{1,2}):(\d{1,2}).*?(\d{1,2}):(\d{1,2})/ )
{
my $min = $4 - $2;
my $hou = 0;
if($min < 0)
{
$min += 60;
$hou = -1;
}
$hou += $3 - $1;
print "$hou:$min\n";
} else {
print "Błąd wejścia\n";
}
Przyjmuje wejście postaci:
Wschód słońca: 7:08 Zachód słońca: 16:55
Odp: W jaki sposób odejmować zmienne?
: 12 lut 2009, 16:01
autor: zet120
Ooo, dzięki za odzew.

Probuję z tym skryptem, ale coś nie chce mnie słuchać.

Aby wszystko było jasne cały plik wygląda tak:
Kod: Zaznacz cały
09-02-12 Wschód słońca: 7:04 Zachód słońca: 17:00
Dane meteo z godziny 15:43
Kierunek wiatru:
Temp.powietrza: 0.3 °C WNW Wilgotność: 83 %
Temp.odczuwalna: -2.4 °C Opady: 0.3 mm
Prędkość wiatru: 4.0 m/s
[OutsideTem] [OutsideHum]
Ciśnienie: 989.1 hPa Rising Slowly
nazywa się
pogoda, a umieszczony jest w
~/test
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 15:03
autor: nUmer
Kod: Zaznacz cały
#!/bin/sh
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`
w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`
roznica=$[ z1 - w1 ]
godz=$[ roznica / 3600 ]
min=$[ roznica % 3600 / 60 ]
echo "${godz}h ${min}min"
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 17:38
autor: zet120
Tytuł wątku zmieniłem mam nadzieję..."na lepszy"
Dzięki kolego
nUmer za kolejną propozycję, ale i ta nie chce u mnie działać.
Uruchamiam w konsoli i otrzymuję:
Kod: Zaznacz cały
zet120@zet120-desktop:~$ ~/Skrypty/godz.sh
/home/zet120/Skrypty/godz.sh: 8: z1: not found
/home/zet120/Skrypty/godz.sh: 9: roznica: not found
/home/zet120/Skrypty/godz.sh: 10: roznica: not found
h min
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 18:19
autor: nUmer
... musi działać!

pokaż co wyświetli polecenie
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 18:24
autor: zet120
Dokładnie to:
Kod: Zaznacz cały
zet120@zet120-desktop:~$ sh -x /home/zet120/Skrypty/godz.sh
+ grep -w Wschód słońca /home/zet120/test/pogoda
+ awk {printf $4}
+ wschod=6:31
+ grep -w Zachód słońca /home/zet120/test/pogoda
+ awk {printf $7}
+ zachod=17:28
+ date --date=6:31 +%s
+ w1=1235799060
+ date --date=17:28 +%s
+ z1=1235838480
+ roznica=$[ z1 - w1 ]
/home/zet120/Skrypty/godz.sh: 1: z1: not found
+ godz=$[ roznica / 3600 ]
/home/zet120/Skrypty/godz.sh: 1: roznica: not found
+ min=$[ roznica % 3600 / 60 ]
/home/zet120/Skrypty/godz.sh: 1: roznica: not found
+ echo h min
h min
zet120@zet120-desktop:~$
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 18:28
autor: nUmer
a spróbuj tak
Kod: Zaznacz cały
#!/bin/bash
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`
w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`
roznica=$(( z1 - w1 ))
godz=$(( roznica / 3600 ))
min=$(( roznica % 3600 / 60 ))
echo "${godz}h ${min}min"
Godziny pobiera i przetwarza prawidłowo - wydaje się to być jakiś błąd składni.
Jak to nie zadziała, to ja już nic nowego nie wymyślę.
Odp: W jaki sposób odejmować zmienne?
: 28 lut 2009, 18:31
autor: zet120
Pięknie dziękuję.
Działa!

Odp: W jaki sposób odejmować zmienne?
: 12 mar 2009, 16:09
autor: ithn
Mam takie pytanie odnośnie polecenia
.
Czy da się w jakiś sposób przekierować wynik działania tego polecenia do pliku, a nie na terminal?
Próbowałem
, ale nie działa.
Odp: W jaki sposób odejmować zmienne?
: 13 mar 2009, 09:00
autor: rryk
Kod: Zaznacz cały
#!/bin/bash
wschod=`grep -w "Wschód słońca" "$HOME"/test/pogoda|awk '{printf $4}'`
zachod=`grep -w "Zachód słońca" "$HOME"/test/pogoda|awk '{printf $7}'`
w1=`date --date="$wschod" +"%s"`
z1=`date --date="$zachod" +"%s"`
roznica=$(( z1 - w1 ))
godz=$(( roznica / 3600 ))
min=$(( roznica % 3600 / 60 ))
echo "${godz}h ${min}min" > plik
teraz już działa ^^ chociaż nie wiem po co ci wynik zapisywać do pliku
Odp: W jaki sposób odejmować zmienne?
: 13 mar 2009, 15:49
autor: ithn
Dzięki, ale nie chodziło mi o wynik skryptu powyżej tylko o
, które wyświetla w terminalu po kolei co się dzieje w skrypcie.
----------------
\\EDIT - Rozwiązanie problemu
Powyższy problem rozwiązany. Może komuś się to przyda (mnie się przydało

).
Są dwa sposoby:
I
II
Kod: Zaznacz cały
script jakis_plik.log [enter]
sh -x ./nazwa_skryptu.sh
[ctrl+d] (przerywa działanie 'script')