我正在使用
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-9\s]+[.][^0-9\s]+/<a href="&">&<\/a><br\/>/g' \
>> index.html
echo "</body></html>" >> index.html
所以我在sed中输入的是:
374,Nov 6,04:03,generate.sh
7.5M,11月6,04:00,Admin-server.log
46M,Nov 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>
答案 0 :(得分:3)
我认为您的第一个更改不应该是将输出文件名硬编码到脚本中。只需正常输出到标准输出,当您调用脚本时,请使用重定向。
例如,您的行
echo "<html>" > index.html
应该只是
echo "<html>"
但是当您调用脚本时,请按以下方式调用它:
my-script > index.html
并且shell会将输出放入正确的文件中。 (如果要将输出放入测试文件中,这在测试时也很有用。)
假设你正在使用sh
,你可能应该用“shebang”开始你的脚本:
#!/bin/bash
作为第一行。有关详细信息,请参阅the Advanced Bash Scripting Guide。
一旦你这样做,你就不需要
grep -v index.html
在您的脚本中,因为它不应出现在脚本的环境中。
在您的示例输入中,您有逗号,但在现实世界中,它们将是空格。不是问题,只是对问题进行修正。
使用awk
,您可以使用逗号分隔字段和空格,而不是" "
。它会更具可读性。并且不要使用sed
;这不是必需的。您可以使用awk
进行所有更改:
awk '{print $3, $4, $5, $6, "<a href=" $7 ">" $7 "</a>"}'
应该这样做。
因此,脚本中的引擎只包含ls
用awk
管道传输,echo
为输出提供一些结构;当您使用脚本时,重定向将负责将其放入文件中。
答案 1 :(得分:0)
#!/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
答案 2 :(得分:0)
上面的代码生成一个index.html文件,当从浏览器页面调用时,该文件将显示目录中的所有文件。您可以使用Web服务器的IP地址和端口替换IP地址。