Ich habe ein Skript, das die Ordner der vorherigen Woche mit der Wochennummer im Namen erstellt. So erhalte ich den Wert der aktuellen Wochennummer und weise die Nummer der vorherigen Woche zu.
WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))
Der Wert von WEEKNBR
ist zweistellig, z. "Week05", aber das PREVWK
wäre "WEEK4".
Wie würde man 1 subtrahieren WEEKNBR
und dem Ergebnis ggf. voranstellen 0
?
Sie können verwenden date
, um die Arithmetik für Sie zu erledigen. Mit BSD-Datum:
$ /bin/date +%V
03
$ /bin/date -v-1w +%V
02
Von man date
:
-v Adjust (i.e., take the current date and display the result of the
adjustment; not actually set the date) the second, minute, hour,
month day, week day, month or year according to val. If val is
preceded with a plus or minus sign, the date is adjusted forwards
or backwards according to the remaining string, otherwise the
relevant part of the date is set. The date can be adjusted as
many times as required using these flags. Flags are processed in
the order given.
Falls Sie GNU date installiert haben und verwenden:
$ date -d '-1week' +%V
02
$ date -d '-1 week' +%V
02
$ date -d 'now - 1 week' +%V
02
$ date -d 'last week' +%V
02
if [[ $PREVWK == 0 ]] . then . PREVWK=52 . YEAR=$((YEAR-1)) . # echo 'prevwk:' $PREVWK . # echo 'prevyear:' $YEAR . fi
Ein "Einzeiler" (OK, Zweizeiler) ist
WEEKNBR=$(date +"%V")
PREVWK=$(printf %02d $((WEEKNBR-1)))
Ich denke, was Sie hier suchen, ist eine Möglichkeit zu überprüfen, ob $PREVWK
2 Ziffern lang sind oder nicht. In diesem Fall stellen Sie entweder ein 0
am Anfang der vorhandenen Nummer ein oder nicht.
Implementierung:
WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))
if [[ $(echo -n ${PREVWK} | wc -c) -lt 2 ]] ; then
PREVWK="0${PREVWK}"
fi
Es betrachtet die Anzahl der Ziffern in der Variablen (stellen Sie sicher, dass es immer eine Zahl ist) und entscheidet, ob sie aus weniger als 2 Ziffern besteht. Wenn dies der Fall ist, wird vorangestellt 0
, andernfalls wird die Nummer in Ruhe gelassen. 23
Auf diese Weise bleiben Wochen wie 23
anstelle von 023
und so weiter.
Lassen Sie mich wissen, ob das für Sie funktioniert oder ob Sie nach einem anderen/anderen Weg suchen, dies zu erreichen. Sie können auch überprüfen, ob die Zahl insgesamt kleiner als 10 ist, was bedeutet, dass ein führender 0
Wert hinzugefügt werden muss.
Ein Einzeiler-Ansatz , der nicht bricht, wenn das neue Jahr herumrollt und der immer die richtige Wochennummer für sieben Tage vor dem aktuellen Moment angibt:
weeknbr="$(date +%V)"
prevwk="$(date -j -v -7d +%V)"
Beachten Sie, dass ich Kleinbuchstaben verwende, da dies keine Umgebungsvariablen sind (oder nicht sein sollten); sehen:
PS: Ich sehe, dass muru eine im Wesentlichen identische Antwort geschrieben hat, aber ich hatte diese Registerkarte einige Stunden lang geöffnet, bevor ich darauf zurückkam, und es versäumt, sie zu aktualisieren.
Platzhalter