2017-05-22 6 views
-1

私はUNIXスクリプトを異なる日付で複数回実行する必要があります。スクリプトは、2017-01-01の場合は最初に実行し、次に2017-02-01の場合は実行する必要があります。私たちは毎月データをチェックしています。誰かが私を助けてくれますか?ありがとう。日付のUNIXループ

+2

これは 'cron'ユーティリティのためのものです(あるいは特定のバージョンのLinuxを使用している場合は、システムタイマーユニット)。 –

+0

ありがとうございます。私は予定された実行を探していません。しかし、スクリプトを今実行すると、Feb 1、Feb 1、March 1月5月1日まで実行する必要があります。入力値は毎月の最初の日とします。 – NewToUnix

+0

ああ、私は見ると思う。 –

答えて

0

一般に反復のループにはforを使用できます。

for date in 2017-{01..12}-01; do 
    echo Processing data for $date 
    # Use $date in some way 
done 

または

for month in $(seq -w 1 12); do 
    date=2017-$month-01 
    echo Processing data for $date 
    # use $date in some way 
done 

のzsh、バッシュで動作する最初の、そして他の多くのシェルを、私は考えていない:あなたは以下のように、 {01..12}または seq -w 1 12で数ヶ月のシーケンスを生成することができますそれらのいずれかのために動作することが保証されています。 2番目のコマンドは、 shのようなシェルで動作するはずです。

+0

ありがとうございます。スクリプトを2日間実行する方法はありますか?例として、最初に1月1日と1月31日の間にすべてのレコードを見つけるためにスクリプトを実行する必要があります、そして、私はFeb1stと2月28日の間にレコードを見つける必要があります。私は、これが要件の理解を深めていく必要があると思います。 2つの日付の間にスクリプトをループする方法はありますか? – NewToUnix

+0

長さの異なる月を扱う必要があるので、それはより複雑です。シェルには日付の固有の概念がないので、日付のリストを生成するために別の言語でプログラムを書く必要があるか、毎月の所要時間のルックアップテーブルが必要です'2017-04-31'や' 2017-02-29'のような無効な日付が与えられていれば、スクリプトをうまく失敗させる必要があります。入力要件を変更する方が簡単かもしれません。 –

+0

これは私が達成しようとしているものです。複数の日付のステップをコピーするのではなく、以下のロジックをループの中に入れて、スリープさせる方法があります: '#!/ bin/bash'2017-03-01'のファイル do '2017年3月31日' でFILE1ため エコー$ファイル は 「の中のファイルを 行わ 睡眠10S を行って$ファイル$ FILE1 エコー "仕事" と$ FILE1 #runジョブをエコーし​​ます2017- 04-01 ' do ' 2017-04-30 '内のファイル1のエコー$ファイル do e cho $ file1 $ file $ file1の#runジョブ echo "ジョブ完了" done done' – NewToUnix

関連する問題