如何在Shell脚本中创建HTML文件?请协助排查代码问题
解决Shell脚本生成HTML文件的问题
我瞅了下你这段脚本,问题主要出在输出重定向的范围和一些小的HTML语法错误上,咱们一步步来改:
问题分析
你现在的写法里,每个echo都是独立的命令,只有最后一个echo后面加了>> text.html,前面所有echo的内容都直接打印到终端了,根本没写入到HTML文件里。另外还有几处HTML的小问题:
- 多余的
</h4>标签(你根本没打开过<h4>标签) <col>标签放错位置了,它应该在<table>内部、<thead>之前,而不是嵌套在<th>里面- 部分
font color的值少了#(比如color="000000"应该是color="#000000")
修正方案1:统一重定向所有echo输出
把所有echo命令用括号包起来,整体重定向到文件,这样所有输出都会写入text.html:
( echo "<html>" echo "<head>" echo "<style type=\"text/css\">" echo "table{background-color:#DCDCDC}" echo "thead {color:#708090}" echo "tbody {color:#191970}" echo "</style>" echo "</head>" echo "<body>" echo "<table border=\"1\">" echo "<col width=\"100\">" echo "<col width=\"100\">" echo "<col width=\"100\">" echo "<thead>" echo "<tr bgcolor='#C0C0C0'><td colspan=\"3\"><center><font color=\"#000000\"><b>CONSOLIDATED RUNBOOK</b></font></center></td></tr>" echo "<tr>" echo "<th><font color=\"#000000\">APP NAME</font></th>" echo "<th><font color=\"#000000\">STATUS</font></th>" echo "<th><font color=\"#000000\">STATUS AS ON</font></th>" echo "</tr>" echo "</thead>" # 这里可以继续添加tbody的内容 echo "</table>" echo "</body>" echo "</html>" ) >> text.html
修正方案2:用Here-Doc更简洁(推荐)
Here-Doc是Shell里生成多行内容更方便的方式,不用反复写echo和转义引号,代码可读性更高:
cat > text.html << EOF <html> <head> <style type="text/css"> table{background-color:#DCDCDC} thead {color:#708090} tbody {color:#191970} </style> </head> <body> <table border="1"> <col width="100"> <col width="100"> <col width="100"> <thead> <tr bgcolor='#C0C0C0'><td colspan="3"><center><font color="#000000"><b>CONSOLIDATED RUNBOOK</b></font></center></td></tr> <tr> <th><font color="#000000">APP NAME</font></th> <th><font color="#000000">STATUS</font></th> <th><font color="#000000">STATUS AS ON</font></th> </tr> </thead> <!-- 在这里添加你的tbody内容 --> </table> </body> </html> EOF
这样写不仅避免了引号转义的麻烦,还能一次性把所有内容写入目标文件,后续维护也更轻松。
内容的提问来源于stack exchange,提问作者Arpit Rathod
相关产品推荐
相关产品推荐

