我正在使用
python -m SimpleHTTPServer 8080
从linux目录启动Web服务器。我正在尝试编写一个shell脚本,该脚本生成一个包含以下信息的index.html页面:文件名(作为超链接(、文件大小、上次修改日期。所以实际上是一个自定义目录列表。
这是一个脚本,它当前获得了正确的信息,但在一行中显示了所有信息,并且没有超链接文件名。有人能告诉我正确的方向吗?
TITLE="Latest Logs"
echo "<html>" > index.html
echo "<title>$TITLE</title>" >> index.html
echo "<body>" >> index.html
echo "<h1>$TITLE</h1>" >> index.html
ls -ctgGh | awk '{print $3 " " $4 " " $5 " " $6 " " $7}'
| grep -v index.html
| sed 's/[^0-9s]+[.][^0-9s]+/<a href="&">&</a><br/>/g'
>> index.html
echo "</body></html>" >> index.html
因此,我要输入sed的是:
374,11月6日,04:03,生成.sh
11月6日上午7点50分,管理员服务器日志
46M,11月6日03:48,run1.log
528K,11月4日15:03,build.log
我想得到:
375,Nov 6,04:14,<a href=generate.sh>generate.sh</a>
7.5M,Nov 6,04:09,<a href=Admin-Server.log>Admin-Server.log</a>
46M,Nov 6,03:48,<a href=run1.log>run1.log</a>
528K,Nov 4,15:03,<a href=build.log>build.log</a>
我认为您的第一个更改不应该是将输出文件名硬编码到脚本中。只需正常输出到标准输出,并且在调用脚本时使用重定向。
例如,您的线路
echo "<html>" > index.html
应该只是
echo "<html>"
但是当你调用脚本时,可以这样调用它:
my-script > index.html
shell会将输出放入正确的文件中。(如果您想将输出放入测试文件中,这在测试时也很有用。(
假设您使用的是sh
,您可能应该以一个"shebang"开始您的脚本:
#!/bin/bash
作为第一行。有关详细信息,请参阅《高级Bash脚本指南》。
一旦你做到了,你就不需要了
grep -v index.html
因为它不应该出现在脚本的环境中。
在您的示例输入中,您有逗号,但在现实世界中,它们将是空格。不是问题,只是对问题的修正。
使用awk
,可以使用逗号(而不是" "
(用空格分隔字段。它会更易读。并且不要使用sed
;没有必要。您可以使用awk
:进行所有更改
awk '{print $3, $4, $5, $6, "<a href=" $7 ">" $7 "</a>"}'
应该做到这一点。
因此,脚本中的引擎将仅由管道连接到awk
的ls
组成,echo
为输出提供一些结构;当您使用脚本时,重定向将负责将其放入文件中。
#!/bin/sh
TITLE="Latest Logs"
echo "<html>" > index.html
echo "<title>$TITLE</title>" >> index.html
echo "<body>" >> index.html
echo "<PRE>" >> index.html
echo "<h1>$TITLE</h1>" >> index.html
ls -lrt | grep -v index.html | awk '{print $3, $4, $5, $6, "<a href=http://10.77.28.119:9090/"$9 "<a>" $9 "</a>"}' >> index.html
echo "</pre>" >> index.html
echo "</body></html>" >> index.html
上面的代码生成了一个index.html文件,当从浏览器页面调用时,该文件将显示目录中的所有文件。您可以将ip地址替换为web服务器的ip地址和端口。