シェルループは日付と値をHTMLとして出力します。

シェルループは日付と値をHTMLとして出力します。

次のコンテンツ形式でHTMLを一括生成する必要がある難しい問題があります。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>

<div>
<time>2020-10-01 07:46:13</time>
<p>text01</p>
</div>

<div>
<time>2020-10-02 07:46:13</time>
<p>text02</p>
</div>

more...

</body>
</html>

2つの値を繰り返す必要があります。

  • 日付(日別増分)
  • 番号(01から増加)

約100個程度を生成する必要がありますが、どうすればよいですか?

助けてくれてありがとう!

答え1

次のようなものが役に立ちます。

#!/bin/bash

cat << EOF
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>

EOF

for ((i = 1; i <= 100; ++i)); do
cat << EOF
<div>
<time>$(date +"%Y-%m-%d %H:%M:%S" -d "+${i} days")</time>
<p>$(printf "test%02d" "${i}")</p>
</div>

EOF

done


cat << EOF
</body>
</html>
EOF

まず、ファイルの上部に変更されていない内容を印刷します。次に1..100から繰り返されます。ループを通過するたびにブロックが作成されますdiv。時間は現在の時間にi日数を加えた値と、testその後に段落i(ゼロで埋められる)が続きます。ファイルの最後に変更されていない内容を印刷して終了します。

実行例:

$ ./ex.sh
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>

<div>
<time>2020-10-17 22:57:00</time>
<p>test01</p>
</div>

<div>
<time>2020-10-18 22:57:00</time>
<p>test02</p>
</div>

...

<div>
<time>2021-01-23 21:57:01</time>
<p>test99</p>
</div>

<div>
<time>2021-01-24 21:57:01</time>
<p>test100</p>
</div>

</body>
</html>

関連情報