2017-12-18 13 views
0

Ich versuche, ein Datum zu testen ... wenn es zwischen diesen zwei Zeitrahmen ist ich möchte sie drucken ... Aber ich bekomme errors..This ist mein Skriptbash if-Anweisung mit der Zeit

today_time=$(date +%H:%M:%S --date '-1 sec') 
today_dow=$(date +"%u") 

today_less=$(date +%H:%M:%S --date '-1 min') 
today_more=$(date +%H:%M:%S --date '+1 min') 
echo $today_less 
echo $today_time 
echo $today_more 

if [ $today_less -gt $today_time ] && [ $today_time -lt $today_more ]; then 
     echo "$today_less" 
     echo "$today_time" 
     echo "$today_more" 
else 
     echo no 
fi 

ich habe versucht, -ge mit -le und gibt mir: Integer Ausdruck -gt und -lt erwartet: Integer-Ausdruck erwartete ich auch verwendet ‚<‘ und ‚>‘ und gibt mir: Keine solche Datei oder ein Verzeichnis .

Ich brauche diese Arbeit zu machen mit der Zeit nur Daten ... nicht mit int

Ursache der Zeit, die ich aus der db extrahiert und today_time mit der Zeit von db ersetzen.

+0

Mögliche duplicate von https://stackoverflow.com/questions/8116503/how-to-compare-two-datetime-strings-and-return-difference-in-hours-bash-shell – tripleee

Antwort

2

Ihr Ausgang ist nicht die Ziffern, sondern Zeichenkette wie:

[[email protected] ~]$ date +%H:%M:%S --date '-1 min' 
13:40:30 

es zu Unix-Zeit Konvertieren und klare Zahlen vergleichen, zum Beispiel:

today_time=$(date +%H:%M:%S --date '-1 sec') 
today_time_u=$(date +%s --date '-1 sec') 

today_dow=$(date +"%u") 

today_less=$(date +%H:%M:%S --date '-1 min') 
today_less_u=$(date +%s --date '-1 min') 

today_more=$(date +%H:%M:%S --date '+1 min') 
today_more_u=$(date +%s --date '+1 min') 

echo $today_less 
echo $today_time 
echo $today_more 

if [ $today_less_u -gt $today_time_u -a $today_time_u -lt $today_more_u ]; then 
     echo "$today_less" 
     echo "$today_time" 
     echo "$today_more" 
else 
     echo no 
fi 

Und noch einmal, in Ihrem Beispiel $today_less ist aktuelles Datum - 1 Minute; $today_time ist das aktuelle Datum - 1 Sekunde; Also, $ today_time> $ today_less jedes Mal und Ihr if [ $today_less_u -gt $today_time_u Teil wird false jedes Mal sein, so dass Sie nichts außer echo no in else Anweisung bekommen können.

+0

danke für Hilfe .. .it funktioniert ... dachte nicht daran, sie zu konvertieren – Omega

+1

Genießen. Btw, in bash, benutze '-a' anstelle von' && 'und' -o' anstelle von '||' in 'if/while' Anweisungen. –

+0

Ich ersetze nur die today_time als Beispiel ... um das if zu testen, bevor ich es auf das reale Skript anwende ... verursache die tatsächliche Zeit, ich bekomme es aus der DB und konvertiere es – Omega