Solaris: 쉘 스크립트를 통해 지난 월요일, 화요일,...일요일 찾기

Solaris: 쉘 스크립트를 통해 지난 월요일, 화요일,...일요일 찾기

예를 들어 지난 월요일, 화요일, 수요일... 오늘 날짜 이전을 찾을 수 있는 bash 또는 ksh 루틴을 필사적으로 찾고 있습니다. 또한 순정 Solaris X에서 작동해야 하는데 GNU 날짜를 알 수 없습니다.

예: 오늘 = 목요일 2013/01/17 마지막 월요일을 찾고 싶다고 가정해 보겠습니다. 반드시 반환되어야 합니다: 2013/01/14

나는 이 특별한 경우를 제외하고 모든 날에 완벽하게 작동하는 스크립트를 온라인에서 찾았습니다. 예: Today = 목요일 2013/01/17 결과를 제공해야 하는 마지막 목요일을 찾고 싶습니다: 2013 /01/10; 오늘 날짜가 또 잡혔네요.

사용된 스크립트는 다음과 같습니다.

#!/bin/ksh

#Get the nbr of the current weekday (1-7)
DATEWEEK=`date +"%u"`
#Which previous weekday will we need (1-7)
WEEKDAY=$1
# Main part
#Get current date
DAY=`date +"%d"`
MONTH=`date +"%m"`
YEAR=`date +"%Y"`
#Loop trough the dates in the past
COUNTER=0
if [[ $DATEWEEK -eq $WEEKDAY ]] ; then
# I need to do something special for the cases when I want to find the date of the same day last week
  DAYS_BACK=168
  DAY=`TZ=CST+$DAYS_BACK date +%d`
  echo "DAY (eq) = $DAY"
else
    while [[ $DATEWEEK -ne $WEEKDAY ]] ; do
       COUNTER=`expr $COUNTER + 1`
       echo "Counter is: $COUNTER"
       DAYS_BACK=`expr $COUNTER \* 24`
       echo "DAYS BACK is: $DAYS_BACK"
       DAY=`TZ=CST+$DAYS_BACK date +%d`
       echo "DAY is: $DAY"
        if [[ "$DAY" -eq 0 ]] ; then
         MONTH=`expr "$MONTH" - 1`
           if [[ "$MONTH" -eq 0 ]] ; then
            MONTH=12
           YEAR=`expr "$YEAR" - 1`
           fi
         fi
       DATEWEEK=`expr $DATEWEEK - 1`
     if [[ $DATEWEEK -eq 0 ]]; then
     DATEWEEK=7
     fi
done
fi
echo $DAY/$MONTH/$YEAR

답변1

나는 그것을 할 것이다:

perl -MPOSIX -le '
  @t=localtime;
  print strftime "%Y/%m/%d", 
    localtime time - 86400*(($t[6]-1+7-$ARGV[0])%7+1)' 4

(4는 요일, 0은 일요일, 4는 목요일)

perl일반적으로 휴대용 날짜 조작에 가장 안전한 선택입니다.

답변2

Shellscript + date는 실제로 가장 적합한 도구는 아닙니다. 주어진 Perl 답변은 이미 훌륭하지만 Python의 명시성을 선호합니다.

import datetime, sys

today = datetime.date.today()
wd = today.weekday() # Mon == 0, Sun == 6
wd_wanted = int(sys.argv[1])

date_wanted = today - datetime.timedelta((wd-wd_wanted)%7 or 7)

or 7비트는 지난 월요일과 오늘이 월요일인 문제를 해결합니다.

답변3

게시된 질문은 일반 Solaris 'X'에 대한 ksh 또는 bash 답변을 요구하므로 가이드의 범위를 벗어난 것 같지만 Tcl 8.5를 설치할 수 있다면 date/에 대한 강력한 시계 명령에 액세스할 수 있습니다. 시간 산술:

tclsh에 전화해...

% set delta 7                                
7
% clock format [clock scan "now - $delta days"]
Fri Jan 11 00:00:00 EST 2013

관련 정보