5개월 안에 for 루프를 실행하는 방법은 무엇입니까?

5개월 안에 for 루프를 실행하는 방법은 무엇입니까?

나는 1개월(20170301 - 20170331) 동안만 스크립트를 활성화하기 위해 이 루프를 만들었습니다.

for ((i = 20170301; i<=20170331; i++)) ; do /home/jul/exp/prod/client/apps/scripts/runCer client-layer-name $i; done

그런데 5개월(20170301~20170831) 동안 실행하고 싶은데 어떻게 해야 하나요?

답변1

GNU를 date사용할 수 있다고 가정하면 다음 // 스크립트를 사용할 수 있습니다 bash.ksh93zsh

start=$(date -ud 20170301 "+%s") # start time in epoch time (seconds since Jan. 1st, 1970)
end=$(date -ud 20170831 "+%s") # end time 

for ((i=start; i <= end; i+=86400)); do # 86400 is 24 hours
    runCerclient-layer-name "$(date -ud "@$i" +%Y%m%d)"
done

답변2

루프는 20170301부터 시작하여 5*30일 동안 실행됩니다.

for (( i=0; i <= 150; ++i )); do
    thedate=$( date -d "20170301 + $i days" "+%Y%m%d" )
    printf 'The date is "%s"\n' "$thedate"
done

하지만 그렇다고 해서 20170831이 되는 것은 아니므로...

이는 날짜부터 시작하여 특정 종료 날짜에 도달할 때까지입니다.

startdate='20170301'
thedate=$startdate

for (( i=0; thedate != 20170831; ++i )); do
    thedate=$( date -d "$startdate + $i days" "+%Y%m%d" )
    printf 'The date is "%s"\n' "$thedate"
done

시작 날짜를 가져와 해당 날짜로부터 5개월 후의 종료 날짜를 계산한 후 다음을 반복합니다.

startdate='20170301'
enddate=$( date -d "$startdate + 5 months" "+%Y%m%d" )

thedate=$startdate

for (( i=0; thedate != enddate; ++i )); do
    thedate=$( date -d "$startdate + $i days" "+%Y%m%d" )
    printf 'The date is "%s"\n' "$thedate"
done

이는 GNU 및 , 또는 와 같은 쉘을 가정합니다 date.bashksh93zsh

답변3

dateseq(때때로 dseq또는 라고도 함 dateutils.dseq) 이 있습니다 dateutils.

dateseq -{i,f}%Y%m%d 20170301 20170831

for ((...))이 구문( ksh93(어디에서 왔는지) 및 )을 지원하는 zsh3개의 셸 중 bash두 셸에는 서로 다른 방식이기는 하지만 이를 기본적으로 지원하는 기능이 있습니다.

크쉬 93

for ((i = 20170301; i<=20170831; i=$(TZ=UTC0 printf '%(%Y%m%d)T' "$i 24:00")))
do
   echo "$i"
done

다루기 힘든

zmodload zsh/datetime
for ((i = 20170301; i<=20170831;)); do
  echo "$i"
  TZ=UTC0 strftime -rs s %Y%m%d $i
  TZ=UTC0 strftime  -s i %Y%m%d $((s + 86400))
done

세게 때리다

GNU 셸은 -like printf도 지원 하지만 날짜 구문 분석이 아닌 형식 지정에만 지원됩니다. 그러나 GNU는 일반적으로 사용 가능한 모든 곳에서 사용할 수 있으며 이에 대한 몇 가지 답변이 제공되었습니다.ksh93%Tbashdate

date비지박스나 BSD와 같은 다른 구현에도 이 기능이 있지만 구문이 다릅니다.

다른 대안으로는 GNU awk또는 perl.

관련 정보