Tengo un script que crea las carpetas de la semana anterior con el número de semana en el nombre. Así es como obtengo el valor del número de la semana actual y asigno el número de la semana anterior.
WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))
El valor de WEEKNBR
está en forma de dos dígitos, por ejemplo. "Semana05" pero PREVWK
sería "SEMANA4".
¿Cómo haría para restar 1 WEEKNBR
y hacer que el resultado sea precedido por 0
cuando corresponda?
Puede utilizar date
para hacer la aritmética para usted. Con fecha BSD:
$ /bin/date +%V
03
$ /bin/date -v-1w +%V
02
de 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.
En caso de que haya instalado y esté usando GNU date:
$ 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
Una "una sola línea" (OK, dos líneas) es
WEEKNBR=$(date +"%V")
PREVWK=$(printf %02d $((WEEKNBR-1)))
Creo que lo que busca aquí es una forma de verificar si $PREVWK
tiene 2 dígitos o no, en cuyo caso, respectivamente, antepone una 0
al comienzo del número existente o no.
Implementación:
WEEKNBR=$(date +"%V")
PREVWK=$((WEEKNBR-1))
if [[ $(echo -n ${PREVWK} | wc -c) -lt 2 ]] ; then
PREVWK="0${PREVWK}"
fi
Mira el número de dígitos en la variable (asegúrese de que siempre sea un número) y decide si se compone de menos de 2 dígitos. Si es así, antepone 0
, de lo contrario, deja el número solo. De esta manera, las semanas 23
permanecerán como 23
en lugar de 023
, y así sucesivamente.
Avíseme si eso funciona para usted o si está buscando otra forma diferente de lograrlo. También puede verificar si el número en su conjunto es menor que 10, lo que significa 0
que se debe agregar un líder.
Un enfoque de una sola línea que no se romperá cuando llegue el año nuevo y que siempre proporcione el número de semana correcto durante siete días antes del momento actual:
weeknbr="$(date +%V)"
prevwk="$(date -j -v -7d +%V)"
Tenga en cuenta que estoy usando nombres en minúsculas porque no son (o no deberían ser) variables de entorno; ver:
PD: Veo que muru ha escrito una respuesta esencialmente idéntica, pero tuve esta pestaña abierta durante algunas horas antes de volver a ella y me olvidé de actualizar.
Comodín