Manipulate date in UNIX

后端 未结 2 477
甜味超标
甜味超标 2021-01-23 09:16

I want to find a way to list all the dates of the current week in UNIX. For example if today is 17-07-2018 then how to get dates 16-07, 18-07, 19-07 and so on for the whole week

2条回答
  •  独厮守ぢ
    2021-01-23 10:09

    Assuming your date recognizes TZ offsets in hours, this works for the current date:

    #!/bin/sh
    
    case $(date +%A) in
      (Monday)    off="  +0  -24 -48 -72 -96 -120 -144";;
      (Tuesday)   off=" +24   +0 -24 -48 -72  -96 -120";;
      (Wednesday) off=" +48  +24  +0 -24 -48  -72  -96";;
      (Thursday)  off=" +72  +48 +24  +0 -24  -48  -72";;
      (Friday)    off=" +96  +72 +48 +24  +0  -24  -48";;
      (Saturday)  off="+120  +96 +72 +48 +24   +0  -24";;
      (Sunday)    off="+144 +120 +96 +72 +48  +24   +0";;
    esac
    for o in $off; do
       TZ="$o" date +%d-%m
    done
    

    Sample run:

    $ date
    Sun Jul 15 23:13:43 CEST 2018
    $ ./x.sh
    09-07
    10-07
    11-07
    12-07
    13-07
    14-07
    15-07
    

    This has no problem with leap years, under/overflow, since it uses date's built-in knowledge.

    PS: I just discovered that my date (on FreeBSD) takes these offsets from UTC, not the systems time zone; you should investigate this for AIX and if so, adjust the offsets accordingly by your local time zone offset to UTC.

提交回复
热议问题