1日から始まるbashシェルスクリプトを作成してから、%Y_%m_dとして出力される後続の各日のフォーマットをループする必要があります。
開始日を送信してから、日数の別のパラメーターを送信できると思います。
私の問題/質問は、日付(現在ではない)を設定してから日を追加する方法です。
だから私の入力は2010_04_016になります
私の出力は
2010_04_01
2010_04_02
2010_04_03
2010_04_04
2010_04_05
2010_04_06
[radical@home ~]$ cat a.sh
#!/bin/bash
START=`echo $1 | tr -d _`;
for (( c=0; c<$2; c++ ))
do
echo -n "`date --date="$START +$c day" +%Y_%m_%d` ";
done
これで、paramsを使用してこのスクリプトを呼び出すと、必要なものが返されます。
[radical@home ~]$ ./a.sh 2010_04_01 6
2010_04_01 2010_04_02 2010_04_03 2010_04_04 2010_04_05 2010_04_06
非常に基本的なbashスクリプトでこれを実行できるはずです。
#!/bin/bash
start_date=20100501
num_days=5
for i in `seq 1 $num_days`
do
date=`date +%Y/%m/%d -d "${start_date}-${i} days"`
echo $date # Use this however you want!
done
出力:
2010/04/30
2010/04/29
2010/04/28
2010/04/27
2010/04/26
注:ここでの解決策はどれもOS Xでは機能しません。たとえば、次のようなものが必要になります。
日付-v-1d +%Y%m%d
それはあなたのために昨日印刷されるでしょう。またはもちろんアンダースコア付き:
日付-v-1d +%Y_%m_%d
したがって、これを考慮に入れると、代わりにこのコマンドを使用して、これらの例のループの一部を調整できるはずです。 -vオプションを使用すると、日、分、秒、年、月などを簡単に加算または減算できます。-v+ 24dは24日を加算します。等々。
#!/bin/bash
inputdate="${1//_/-}" # change underscores into dashes
for ((i=0; i<$2; i++))
do
date -d "$inputdate + $i day" "+%Y_%m_%d"
done
非常に基本的なbashスクリプトでこれを実行できるはずです。
脚本:
#!/ bin/bash
start_date = 20100501
num_days = 5
for i in seq 1 $num_days
行う
日付= date +%Y/%m/%d -d "${start_date}-${i} days"
echo $ date#これを好きなように使用してください!
完了
出力:
2010/04/30
2010/04/29
2010/04/28
2010/04/27
2010/04/26
たとえば、calを使用することもできます
YYYY=2014; MM=02; for d in $(cal $MM $YYYY | grep "^ *[0-9]"); do DD=$(printf "%02d" $d); echo $YYYY$MM$DD; done
(最初に投稿された ここに私のcommandlinefuアカウントに )
コマンドラインオプション-dを介して日付をGNU複数の入力形式を処理する日付に渡すことができます:
http://www.gnu.org/software/coreutils/manual/coreutils.html#Date-input-formats
コマンドライン引数として開始日を渡すか、現在の日付を使用します。
underscore_date=${1:-$(date +%y_%m_%d)}
date=${underscore_date//_/-}
for days in $(seq 0 6);do
date -d "$date + $days days" +%Y_%m_%d;
done