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:

Kod: Zaznacz cały

Wschód słońca: 7:08  Zachód słońca: 16:55
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ę:

Kod: Zaznacz cały

Wschód słońca: 7:08  Zachód słońca: 16:55
czy może po prostu:

Kod: Zaznacz cały

7:08
16:55
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ć. :wink:
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

Kod: Zaznacz cały

sh -x /home/zet120/Skrypty/godz.sh

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

Kod: Zaznacz cały

sh -x
.
Czy da się w jakiś sposób przekierować wynik działania tego polecenia do pliku, a nie na terminal?
Próbowałem

Kod: Zaznacz cały

sh -x ./skrypt.sh > plik
, 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

Kod: Zaznacz cały

sh -x ./dowolny_skrypt.sh
, 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

Kod: Zaznacz cały

sh -x ./nazwa_skryptu.sh &> jakis_plik.log
II

Kod: Zaznacz cały

script jakis_plik.log [enter]
sh -x ./nazwa_skryptu.sh
[ctrl+d] (przerywa działanie 'script')