Masayan tech blog.

  1. ブログ記事一覧>
  2. シェルスクリプトで指定日付の名称でテキストファイルを一括生成する

シェルスクリプトで指定日付の名称でテキストファイルを一括生成する

公開日

環境

  • gitbash 2.32.0.1

実装

全体像

memo()
{
  echo "YEAR: ex)2022"
  read input
  YEAR=$input

  echo "MONTH: ex)03"
  read input
  MONTH=$input

  start="${YEAR}${MONTH}01"
  end=$(date -d${MONTH}/01/${YEAR}-1days+1month '+%Y%m%d')

  echo "${start}${end}の日付でメモテキストを作成してよいですか?[Yes or No]"
  read input

  if [ $input != 'Yes' ] && [ $input != 'yes' ] && [ $input != 'y' ] ; then
    return
  fi

  current="$start"

  cd "/c/Users/nishigaki/Desktop/memo/test/"

  while true; do
    echo "$current"
    if [ "$current" = "$end" ] ; then
      break
    fi

    touch ${current}.txt
    current=$(date -d "$current 1day" "+%Y%m%d")
  done
}

呼び出し

$ memo

YEAR: ex)2022
2021
MONTH: ex)03
05
2021050120210531の日付でメモテキストを作成してよいですか?[Yes or No]
Yes
20210501
20210502
20210503
20210504
20210505
20210506
20210507
20210508
・・・割愛

上記のように対話型で年月を入力すると、その月の日付分のテキストファイルが生成される

個別の処理

日付の生成

  • ユーザーからの入力を受けて、開始日と終了日を生成する
memo()
{
  echo "YEAR: ex)2022"
  read input
  YEAR=$input

  echo "MONTH: ex)03"
  read input
  MONTH=$input

  start="${YEAR}${MONTH}01"
  end=$(date -d${MONTH}/01/${YEAR}-1days+1month '+%Y%m%d')

read inputとすることで、ユーザーからの入力値を使用することができます

ユーザーへの確認とテキストファイルを作成するフォルダへの移動

  • Yes, yes,y以外の文字列がinputで入ってきた場合はif文で早期リターンする
echo "${start}${end}の日付でメモテキストを作成してよいですか?[Yes or No]"
read input

if [ $input != 'Yes' ] && [ $input != 'yes' ] && [ $input != 'y' ] ; then
  return
fi

current="$start"

cd "/c/Users/nishigaki/Desktop/memo/test/"

開始日~終了日の日付でループし、テキストファイルを生成する

  • whileの条件式をtrueにしており、無限ループしてしまうのでループ内でbreakの条件を指定する
  • 開始日と終了日が等しくなったタイミングでループを抜ける
  while true; do
    echo "$current"
    if [ "$current" = "$end" ] ; then
      break
    fi

    touch ${current}.txt
    current=$(date -d "$current 1day" "+%Y%m%d")
  done
}

余談ですが、touchコマンドで、既存のファイルと同名のファイルが指定されても、上書きされないのでご安心を

まとめ

いかがでしたでしょうか。本記事では、シェルスクリプトで指定日付の名称でテキストファイルを一括生成する方法について紹介しています。ぜひ参考にしてみてください。