Forum Linux.pl

Programowanie => Bash, skrypty powłoki => Wątek zaczęty przez: jaro~123 w 2014-08-08, 10:53:35

Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 10:53:35
Witam Wszystkich,
mam problem z porównaniem dat przypisanych do zmiennych, wujek google wypluwa dużo wyników jednak nie wiele mi to pomaga, dlatego zarejestrowałem się na forum. Chciałbym zaznaczyć, że bash to dla mnie nowość, proszę więc o pomoc.
Problem przedstawia się następująco:

---
data_ostatniej_synchronizacji=$(stat -c %y plik)
data_ostatniej_synchronizacji=${data_ostatniej_synchronizacji%% *}
  tu otrzymuję date w formacie 2014-08-11

datę bierzącą modyfikuje o kilka dni w sposób:
data_porownania=$(date +%Y%-m%-d -d "$DATE - $dni_do_synchronizacji day")


pytanie w jaki sposób sprawdzić która jest mniejsza?

mój pomysł jest taki aby usunąc myślniki z daty i następnie je porównać, z datą bierzącą nie mam problemu, robie to tak:
data_porownania=$(date +%Y%m%d -d "$DATE - $dni_do_synchronizacji day")

problem mam z datą modyfikacji pliku czyli w jaki sposób zmodyfikować zawartość zmiennej usunąć z niej myślniki? próbowałem cut i awk ale bez efektów, a może są inne prostsze metody porównania dat? te które znalazłem w necie się nie sprawdzają w moim przypadku a nie potrafię ich zmodyfikować, proszę o pomoc i pozdrawiam Wszystkich forumowiczów
Tytuł: porównanie dat
Wiadomość wysłana przez: 1709 w 2014-08-08, 11:05:58
Wyszukanie najstarszej daty z kilku - ostatni post w linku
http://www.debian.pl/threads/12900-Por%C3%B3wnywanie-dat-i-wybranie-jednej-bash

Porownanie 2 dat - przedostatni post w linku
http://forum.slackware.pl/viewtopic.php?t=19564
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 11:11:20
widziałem ten post, ja szukam metody porównania dwóch zmiennych z wykorzystaniem funkcji IF
Tytuł: porównanie dat
Wiadomość wysłana przez: vanhelzing w 2014-08-08, 11:59:13
Cytuj
pytanie w jaki sposób sprawdzić która jest mniejsza?
Wskazówka:
date +%s
stat -c %Z plik
Tytuł: porównanie dat
Wiadomość wysłana przez: 1709 w 2014-08-08, 12:00:24
Ktory widziales?
Propo ciecia -
 przyklad:
 a="2014-08-11" ; echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g'
20140811
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 12:24:37
Cytat: tele
Ktory widziales?
Propo ciecia -
 przyklad:
 a="2014-08-11" ; echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g'
20140811
super o to chodziło :) tylko proszę napisz mi jeszcze w jaki sposób mogę rezultat zamiast wyświetlić to zapisać do zmiennej
Tytuł: porównanie dat
Wiadomość wysłana przez: 1709 w 2014-08-08, 13:13:11
Przyklad
 a="2014-08-11" ; b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b
20140811
PS:
Cytuj
mój pomysł jest taki aby usunąc myślniki z daty i następnie je porównać
Nie musisz wycinac - by porownac daty, przyklady wyzej sa wystarczajace. ( no chyba ze cos nie zrozumialem )

aaaa i jeszcze cos , jak zrobisz tak
date +%Y%m%d
20140808
to tez wyjdzie bez -
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 13:45:34
konstrukcja:
b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b

zwraca u mnie taki błąd:
Syntax error: "(" unexpected (expecting "fi")

 :(

chyba źle opisałem mój problem na początku postu, więc napisże jeszcze raz, potrzebuję czegoś takiego:

if [ data_modyfikacji_pliku < (data_systemowa - Xdni) ]; then
  -----
  -----
else
  -----
  -----
fi


tele, o tym wiem:

date +%Y%m%d
20140808

mój problem polega na tym, że potrzebuje pobrać date modyfikacji pliku i zapisać ją bez myślników czyli coś w tym stylu:
  data_ostatniej_synchronizacji=$(stat -c %y data)
  data_ostatniej_synchronizacji=${data_ostatniej_synchronizacji%% *}
tyle, że taki kod wypluwa mi datę z myślnikami, i tu mam problem jak zmodyfikować zmienną data_ostatniej_synchronizacji aby prezentowała date bez myślników?
Tytuł: porównanie dat
Wiadomość wysłana przez: 1709 w 2014-08-08, 14:10:34
Masz to w drugim linku od gory...
tylko zamiast
(data_systemowa - Xdni)
uzyj zmiennej

Edytowane
Moze to Ci sie przyda do ogarniecia zmiennych
http://wbzyl.inf.ug.edu.pl/sp/bash
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 14:22:45
tele, masz racje nie zauważyłem tego linku :)
przepraszam za zamieszanie, już wszystko jest jasne
Dzieki
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 14:41:26
Z przykrością muszę stwierdzić, że kod z drugiego linku od góry nie działa prawidłowo, niby jest ok ale nie porównuje dobrze dat w formacie 2014-08-01
skrypt wyświetla mi sprzeczne informacje to kawałek kodu:

  if [ x"$$data_ostatniej_synchronizacji" '<' x"$data_porownania" ]; then
    echo "$data_ostatniej_synchronizacji jest starsza od $data_porownania"
  else
    echo "$data_ostatniej_synchronizacji jest młodsza od $data_porownania"
Tytuł: porównanie dat
Wiadomość wysłana przez: 1709 w 2014-08-08, 15:02:14
A co wyswietla i jakich dat uzyles?


Edytowane:
Pokaz log , wpisujac w terminalu:
bash -x ./nazwa_skryptu
z tym tez
Cytuj
konstrukcja:
b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b

zwraca u mnie taki błąd:
Syntax error: "(" unexpected (expecting "fi")
to zobaczymy co jest nie tak


Edytowane
I wklej wynik w znaczniki code tu na forum
http://forum.linux.pl/help.php#bbcode

Jesli skrypt jest bardzo dlugi dlugi to mozesz tylko fragmenty tu wkleic.
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 15:06:01
używam różnych tj pierwsza dat większa lub mniejsza i druga data większa lub mniejsza ciągle wypluwa drugą opcje tj echo po else
Tytuł: porównanie dat
Wiadomość wysłana przez: jaro~123 w 2014-08-08, 16:02:30
I sprawa się wyjaśniła :)
tak to jest jak się człowiek bierze się za coś nowego,
skrypty uruchamiałem przez sh nazwa_pliku a nie bash nazwa_pliku :) wariant
b=(`echo $data_ostatniej_synchronizacji | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b
działa :)