2010-12-14 10 views
9

OS X(Snow Leopard)の日付機能にはGNUバージョンのような--dateオプションがありません。 OS X上で、次の同等:SiegeXからの回答で解決Mac OS Xシェルスクリプトの開始日から終了日までのループ

startdate=2010-01-01 
enddate=2010-01-31 
foldate="$startdate" 

until [ "$foldate" == "$enddate" ] 
do 
    # do something with the date here - like pass it as a parameter to a command 
    foldate=`/bin/date --date "$foldate 1 day" +%Y-%m-%d` 
done 

startdate=2010-01-01 
enddate=2010-01-31 

sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"` 
eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"` 
dateTs=$sDateTs 
offset=86400 

while [ "$dateTs" -le "$eDateTs" ] 
do 
    date=`date -j -f "%s" $dateTs "+%Y-%m-%d"` 
    printf '%s\n' $date 
    dateTs=$(($dateTs+$offset)) 
done 
+0

あなたのために働くことを嬉しいです。私は 'bash'のOSXのバージョンが何であるか分かりませんが(もしbashがあれば)、' sdateTs = $(date -j -f)のようなバッククォートではなく '$()'でコマンドをラップするべきです...) 'と' '[' 'の代わりに二重かっこ' '[' 'を使って' '[[" $ dateTS "<" $ eDateTs "]]' – SiegeX

答えて

1

man dateを実行して、日付のmanページを読むと-vオプションを見てください。以下はその抜粋です:

-vは(すなわち、 現在の日付を取ると 調整の結果を表示し、実際に 日付を設定していない)を調整し、秒、分、時間、月の日を、平日は、 月または年によって異なります。 の前にプラス記号またはマイナス記号が付いている場合、日付は が前方に調整されたか、または になります。残りの文字列には になります。そうでなければ、 日付の関連部分が設定されます。これらのフラグを使用して、必要な回数だけ日付を調整することができます( )。フラグは の順に処理されます。

+1

SiegeXを実行しましたが、私はそのオプションで日付の出力以外のものをどのように変更するのかを説明します。言い換えれば、「今」に-j -v + 1dの日付を追加できますが、任意の日にどのように日を追加するのですか? –

+0

-vの問題は、 "現在の日付を取る..."です(マンページ以上)。私は現在の日付を変更したくない、任意の日付を変更する必要がある - 私が指定した日付。 –

+0

@hglattergotzあなたができる唯一のことは、現在の日付を変数に保存し、日付を$ foldateに設定し、 '-v'を使用してそのオフセットを取得することです。最後に、日付を元の値に戻します。 – SiegeX

関連する問題