staging.inyokaproject.org

Script mit Datumsvergleich funktioniert nicht

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Xt23-2

Anmeldungsdatum:
12. Juni 2014

Beiträge: 53

Hallo, ich versuche mich momentan an einem Skript, was ich leider nicht hinbekomme. In einer Textdatei steht die Jahreszahl und der Wochentag (201804). Das ermittelte Maschinendatum JJJJWW (201805), soll verglichen werden und daraus sollen unterschiedliche Aktionen gemacht werden. Nur den Vergleich bekomme ich nicht hin. Was mache ich falsch? Kann es sein, dass das Maschinendatum ein anderes Format hat?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
d=`date +%Y%V`      #JJJJWW aus Maschine ermitteln  z.B. 201805
WOCHE=~/Vorlagen/Woche.txt 
VAR=`head -n 1 $WOCHE`      #Jahr und Woche auslesen und als Variable speichern 
echo $VAR 
echo $d
if [ $VAR < $d ] ; then
        echo "aktueller Wochentag $d ist größer als $VAR "
else 
        echo "Das aktuelle Datum $d ist gleich oder kleiner "
fi

gebe ich das Skript über die Konsole ein, erscheint folgendes:

sandra@sandra-E6234 ~ $ d=`date +%Y%V`      #JJJJWW aus Maschine ermitteln  z.B. 201805
sandra@sandra-E6234 ~ $ WOCHE=~/Vorlagen/Woche.txt 
sandra@sandra-E6234 ~ $ VAR=`head -n 1 $WOCHE`      #Jahr und Woche auslesen und als Variable speichern 
sandra@sandra-E6234 ~ $ echo $VAR 
201804
sandra@sandra-E6234 ~ $ echo $d
201805
sandra@sandra-E6234 ~ $ if [ $d > $VAR ] ; then
>         echo "aktueller Wochentag $d ist größer als $VAR "
> else 
>         echo "Das aktuelle Datum $d ist gleich oder kleiner "
> fi
aktueller Wochentag 201805 ist größer als 201804 
sandra@sandra-E6234 ~ $ 

stimmt, der Wert 201805 ist größer.

Drehen ich jetzt die Abfrage herum " if [ $VAR < $d ] ; then " kommt folgendes heraus:

sandra@sandra-E6234 ~ $ d=`date +%Y%V`      #JJJJWW aus Maschine ermitteln  z.B. 201805
sandra@sandra-E6234 ~ $ WOCHE=~/Vorlagen/Woche.txt 
sandra@sandra-E6234 ~ $ VAR=`head -n 1 $WOCHE`      #Jahr und Woche auslesen und als Variable speichern 
sandra@sandra-E6234 ~ $ echo $VAR 
201804
sandra@sandra-E6234 ~ $ echo $d
201805
sandra@sandra-E6234 ~ $ if [ $VAR < $d ] ; then
>         echo "aktueller Wochentag $d ist größer als $VAR "
> else 
>         echo "Das aktuelle Datum $d ist gleich oder kleiner als $VAR "
> fi
bash: 201805: Datei oder Verzeichnis nicht gefunden
Das aktuelle Datum 201805 ist gleich oder kleiner als 201804 
sandra@sandra-E6234 ~ $ 

Ich versteh die Welt nicht, 201804 ist kleiner als 2101805 und nicht umgekehrt. Danke vorab für jede Hilfestellung.

Moderiert von ChickenLipsRfun2eat:

Dieses Thema ist verschoben worden. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“)!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Xt23-2 schrieb:

sandra@sandra-E6234 ~ $ d=`date +%Y%V`      #JJJJWW aus Maschine ermitteln  z.B. 201805
sandra@sandra-E6234 ~ $ WOCHE=~/Vorlagen/Woche.txt 
sandra@sandra-E6234 ~ $ VAR=`head -n 1 $WOCHE`      #Jahr und Woche auslesen und als Variable speichern 
sandra@sandra-E6234 ~ $ echo $VAR 
201804
sandra@sandra-E6234 ~ $ echo $d
201805
sandra@sandra-E6234 ~ $ if [ $VAR < $d ] ; then
>         echo "aktueller Wochentag $d ist größer als $VAR "
> else 
>         echo "Das aktuelle Datum $d ist gleich oder kleiner als $VAR "
> fi
bash: 201805: Datei oder Verzeichnis nicht gefunden
Das aktuelle Datum 201805 ist gleich oder kleiner als 201804 
sandra@sandra-E6234 ~ $ 

Ich versteh die Welt nicht, 201804 ist kleiner als 2101805 und nicht umgekehrt.

Die Fehlermeldung gibt Dir einen wesentlichen Hinweis: das Kleinerzeichen wird als Eingabeumleitung missverstanden. Du musst es escapen - oder den numerischen Vergleich nutzen:

1
2
3
4
5
6
7
8
9
$ VAR=201804
$ d=201805
$ if [ $VAR < $d ]; then echo kleiner; else echo groesser; fi
bash: 201805: No such file or directory
groesser
$ if [ $VAR \< $d ]; then echo kleiner; else echo groesser; fi
kleiner
$ if [ $VAR -lt $d ]; then echo kleiner; else echo groesser; fi
kleiner
Antworten |