我正在尝试为JPG图像创建一个for循环,以将它们添加到具有每个图像不同属性的html代码中。我希望能够更改每三个图像的html代码的内容。这是当前代码:
for file in *.jpg
do
cat >> page.html << _EOF
<table class="super-centered"><tr><td style="width:100%;height:100%;" align="center" valign="middle" > <img alt="" src="${file}"> </td></tr></table>
<table class="super-centered"><tr><td style="width:100%;height:100%;" align="right" valign="right" > <img alt="" src="${file}"> </td></tr></table>
<table> class="super-centered"><tr><td style="width:100%;height:100%;" align="left" valign="left" > <img alt="" src="${file}"> </td></tr></table>
_EOF
done
我希望以${file}
第一个图像居中,第二个图像为右,第三个图像为左的方式替换for循环。然后将第四个图像居中,将第5个图像居中,然后将第6个图像居中。依此类推,直到所有图像都放置在表格中为止,因此基本上可以为循环中的每3个文件更改cat的内容。有没有办法做到这一点?
保持计数并检查case
:
i=0
for file in *.jpg
do
case $i in
0)
cat << _EOF
code one
</div>
_EOF
;;
1)
cat << _EOF
code two
</div>
_EOF
;;
2)
cat << _EOF
code three
</div>
_EOF
;;
esac
((i = (i+1) % 3))
done >> page.html
请注意,*.jpg
最终可能无法获得所需的订单。
现在我们知道所需的输出,我们可以更轻松地生成它:
#! /bin/bash
td_format='
<td style="width:100%%;height:100%%;" align="%s" valign="%s" > <img alt="" src="%s"> </td>
'
set -- *.jpg
{
echo '<table class="super-centered">'
while [[ -n $1 ]]
do
echo ' <tr>'
printf "$td_format" center middle "$1" right right "$2" left left "$3"
echo ' </tr>'
shift 3
done
echo '</table>'
}> page.html
在此,td_format
变量是的格式字符串printf
。%s
在格式字符串由参数替换printf
(和%%
通过%
)。printf
循环遍历参数,所以我们只需要在此处指定一个元素的格式,并printf
会遍历参数以打印足够的行。
然后,我们将脚本的参数设置为文件名。现在,我们可以使用$1
,$2
等访问这些文件名。在循环中,我使用$1
,$2
和$3
,然后使用删除这三个文件名shift 3
。然后,接下来的三个文件名成为$1
,$2
并$3
分别。因此,我们可以分三批循环。
最后,我没有重定向每个命令,而是将整个代码包装进去{ }
并重定向了该组。
您可能应该重新考虑此处使用的HTML和样式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句