スクリプト2

以下のシェルスクリプトでは、指定された日付範囲を一度変数に格納してから、その変数を使って日付を出力します。

#!/bin/bash

# 引数チェック
if [ "$#" -ne 2 ]; then
  echo "Usage: $0 <From yyyymmdd> <To yyyymmdd>"
  exit 1
fi

# 引数を変数に格納
FROM_DATE=$1
TO_DATE=$2

# 日付のフォーマットチェック
if ! date -d "${FROM_DATE}" +"%Y%m%d" >/dev/null 2>&1; then
  echo "Invalid From date: ${FROM_DATE}"
  exit 1
fi

if ! date -d "${TO_DATE}" +"%Y%m%d" >/devnull 2>&1; then
  echo "Invalid To date: ${TO_DATE}"
  exit 1
fi

# FROM_DATEを秒数に変換
FROM_DATE_SEC=$(date -d "${FROM_DATE}" +%s)
# TO_DATEを秒数に変換
TO_DATE_SEC=$(date -d "${TO_DATE}" +%s)

# 秒単位の日数を計算
DAY_SEC=86400

# 日付の範囲を格納する配列
dates=()

# 指定した日付の範囲を配列に格納
CURRENT_DATE_SEC=$FROM_DATE_SEC
while [ "$CURRENT_DATE_SEC" -le "$TO_DATE_SEC" ]; do
  dates+=($(date -d "@${CURRENT_DATE_SEC}" +"%Y%m%d"))
  CURRENT_DATE_SEC=$(($CURRENT_DATE_SEC + $DAY_SEC))
done

# 格納した日付を出力
for date in "${dates[@]}"; do
  echo $date
done

このスクリプトの動作は以下の通りです:

  1. 引数の数をチェックし、2つの日付が提供されていることを確認します。
  2. 引数を適切な変数に格納します。
  3. 各引数が有効な日付形式であるかをチェックします。
  4. dateコマンドを使用して日付を秒数に変換します。
  5. 一日を秒数(86400秒)として定義します。
  6. ループを使用して、開始日から終了日までの日付を配列 dates に1日ごとに格納します。
  7. 配列 dates 内の日付を順に出力します。

このスクリプトを実行するには、シェルスクリプトファイル(例:date_range.sh)として保存し、その後を実行可能にします:

chmod +x date_range.sh

実行方法は以下の通りです:

./date_range.sh 20230101 20230105

上記の例では、20230101 から 20230105 までの日付が順に出力されます。

コメント

タイトルとURLをコピーしました