環境
- 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
20210501~20210531の日付でメモテキストを作成してよいですか?[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コマンドで、既存のファイルと同名のファイルが指定されても、上書きされないのでご安心を
まとめ
いかがでしたでしょうか。本記事では、シェルスクリプトで指定日付の名称でテキストファイルを一括生成する方法について紹介しています。ぜひ参考にしてみてください。