这个脚本
在接下来的课程中,我们将建立一个有用程序。该程序会产生一个包含你系统信息的HTML文档。我花了大量时间思考如何教授shell编程,要努力靠近这一点是我所见过的较为困难的。大多数的兴趣在许多特性的有序对待上,和经常假设编程语言的经验。尽管我不猜想你已经了解如何编程,我了解到许多人今天都知道如何编写HTML,所以我们的第一个程序将制作一个网页。当我们构建一个脚本,我们将一步步发现立即解决程序的工具。
用脚本写一个HTML文件
正如你可能知道,一个好的形式的HTML文件包含了如下内容:
<HTML>
<HEAD>
    <TITLE>
    The title of your page
    </TITLE>
</HEAD>
 
<BODY>
    Your page content goes here.
</BODY>
</HTML>
现在,用上你所知道的,我们可以写一个反映上述内容的脚本。
#!/bin/bash
 
# make_page - A script to produce an HTML file
 
echo "<HTML>"
echo "<HEAD>"
echo "  <TITLE>"
echo "  The title of your page"
echo "  </TITLE>"
echo "</HEAD>"
echo ""
echo "<BODY>"
echo "  Your page content goes here."
echo "</BODY>"
echo "</HTML>"
       
这个脚本可以像如下被使用:
[me@linuxbox me]$ make_page > page.html
已经说过了最好的程序员也非常的懒。他们写程序保存他们自己的工作。同样的,当聪明的程序员写程序,他们尝试保存他们自己的输入。
这个脚本第一个需要改进的地方是替换那些重复使用echo命令的,就像这个脚本一样:
#!/bin/bash
 
# make_page - A script to produce an HTML file
 
cat << _EOF_
<HTML>
<HEAD>
    <TITLE>
    The title of your page
    </TITLE>
</HEAD>
 
<BODY>
    Your page content goes here.
</BODY>
</HTML>
_EOF_
       
这个脚本(有时也被叫做这个文档)是I/O重定向的额外形式。它提供一种方式包含赋予一个命令的标准输入的内容。就以上这个脚本来说,cat命令被赋予我们脚本的输入流到它的标准输入。
这个脚本像这样构建的:
command << token
content to be used as command's standard input
token
       
token 可以是任意的字符串。我使用”_EOF_”(EOF”End Of File”的简称)因为它是惯例,但是你能使用任何的东西,只要它不会跟bash 的预定关键字冲突。token 结束这个脚本必须精确的符合开启它的,要不然你的脚本的剩余部分将会被解释为对命令的更多标准输入。
你可以在这个脚本中使用额外的技巧。通常的你想把内容部分缩进以增强脚本的可读性。你可以将以下这个脚本修改以实现这个目的:
#!/bin/bash
 
# make_page - A script to produce an HTML file
 
cat <<- _EOF_
    <HTML>
    <HEAD>
        <TITLE>
        The title of your page
        </TITLE>
    </HEAD>
 
    <BODY>
        Your page content goes here.
    </BODY>
    </HTML>
_EOF_
       
在这个脚本中改变”<<””<<-”导致bash忽视首要的制表符(但不空格)Cat 命令的输出将不包含任何的首字符缩进。
好的,让我们制作我们的页面。我们修改页面以使它这样表达:
#!/bin/bash
 
# make_page - A script to produce an HTML file
 
cat <<- _EOF_
    <HTML>
    <HEAD>
        <TITLE>
        My System Information
        </TITLE>
    </HEAD>
 
    <BODY>
    <H1>My System Information</H1>
    </BODY>
    </HTML>
_EOF_
       
在我们的下一课中,我们会制作关于真正系统信息的脚本。