[BASH] Datum in Variable hochzählen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

[BASH] Datum in Variable hochzählen

Beitrag von aLiEnTxC » 10.09.2007 00:39:07

Hallo Freunde!

Ich versuche gerade verzweifelt eine kl. Schleife zu bauen, in der ich den Tag, Monat und das Jahr in einer Variable hochzähle und das für 7 Tage.

Dazu hab ich rausgefunden, dass ich z.B. mit 'date --date="1 days" +%d' das date befüttern kann. Allerdings läut das irgendwie nicht in meiner Schleife:

Hier mal mein Test Script:

Code: Alles auswählen

#!/bin/sh

COUNT=0

while [ ${COUNT} -lt 7 ]
do
    # Datum ermitteln

    CMD="date --date=\"${COUNT} days\" +%d"
    echo $CMD
    D=$($CMD)
    echo $D

#    $D=`date --date="$COUNT days" +%d`
#    echo $D
    #$M=`date --date="${COUNT} days" +%m`
    #$Y=`date --date="${COUNT} days" +%Y`

    COUNT=$(($COUNT+1))
done
Ich habs auf verschiendene Arten versucht (wie man oben sieht)
Bei der 1. mit CMD kommt immer
date --date="0 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="1 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="2 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="3 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="4 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="5 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.

date --date="6 days" +%d
date: zusätzlicher Operand „+%d“
„date --help“ gibt weitere Informationen.
Wenn ich dann aber den Inhalt von CMD manuell auf der Console ausführe, funktioniert es...

Bei der zweiten (mit direkter Ausführung und Zuweisung) kommt:
./test.sh: line 14: =10: command not found
./test.sh: line 14: =11: command not found
./test.sh: line 14: =12: command not found
./test.sh: line 14: =13: command not found
./test.sh: line 14: =14: command not found
./test.sh: line 14: =15: command not found
./test.sh: line 14: =16: command not found
Bin über jeden Tip dankbar.

Gruß,
Thomas

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.09.2007 08:25:35

du hast nur falsch gequotet, so funkts:

Code: Alles auswählen

root@gms4:~# cat x.sh
COUNT=0
while [ ${COUNT} -lt 7 ]
do
    D=$(date --date="${COUNT} days" +%d)
    M=$(date --date="${COUNT} days" +%m)
    Y=$(date --date="${COUNT} days" +%Y)
    echo $Y-$M-$D
    COUNT=$(($COUNT+1))
done
root@gms4:~# ./x.sh
2007-09-10
2007-09-11
2007-09-12
2007-09-13
2007-09-14
2007-09-15
2007-09-16

aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Beitrag von aLiEnTxC » 10.09.2007 14:11:20

Ich hätte schwören können es so versucht zu haben... :oops:

Aber anscheined doch nicht in dieser kombi.

Danke es funktioniert. :D

Gruß,
Thomas

currock
Beiträge: 60
Registriert: 12.06.2013 23:51:58

Re: [BASH] Datum in Variable hochzählen und Dateien einsort

Beitrag von currock » 13.11.2016 12:14:58

Vielen Dank für die Infos, ich habe das mal genutzt um meine 116000 Bilddateien, die in einem Ordner lagen, um zu sortieren.

Code: Alles auswählen

#!/bin/sh

# Das Startdatum festlegen, umwandlung in Sekunden seit dem 1.1.1970, damit man rechnen kann
COUNT=$(date --date="20160624" +%s)
# Das Enddatum ist Heute, ebenfalls in Sekunden seit 1.1.1970 umrechnen.
ENDDATUM=$(date --date="TODAY" +%s)
# ...wird aber durch den Vergleich nur bis gestern ausgeführt, soll aber auch so sein.
while [ ${COUNT} -lt $ENDDATUM ]
do
Datum=$(date --date "@${COUNT}" +%Y%m%d)
echo $Datum
mkdir $Datum
mv Bild_"$Datum"* $Datum"/"
# Das Datum um 24 Stunden hochzählen
    COUNT=$(($COUNT+3600*24))
done
Vielleicht kann es ja jemand brauchen.
Mit Dateimanager oder von Hand hätte ich Tage gebraucht und wäre am Schluss wahnsinnig geworden.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: [BASH] Datum in Variable hochzählen

Beitrag von rendegast » 13.11.2016 18:42:27

Was auch funktioniert

Code: Alles auswählen

...
    echo $CMD
    D=$(eval $CMD)
    echo $D
...
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten