Here 脚本 Here Scripts
From Magic Linux wiki
[编辑] Here 脚本 Here Scripts
[编辑] Here Scripts
在后续课程中,我们将构建一个有用的程序. 这个程序将生成一个 HTML 文档 用于显示你的系统信息.在如何讲解shell编程问题上,我苦思良久,我接下来要采用的讲解方式,与我所见过的大多数的讲解方式有很大差异.大多数的讲解方式倾向于系统的对待编程的诸项功能,并假设学习者有使用其它编程语言的经验. 虽然我不敢肯定你已经了解如何编程,但我意识到今天许多人了解到如果制作 HTML网页,所以我们的第一个程序将用来制作一个网页. 在我们制作网页的过程中,我们将逐步展示我们手头上有的用于解决难题的工具.
[编辑] 用脚本制作一个HTML文件(Writing an HTML file with a script)
正如你所知,一个完整格式的HTML文件将包含以下内容:
<HTML>
<HEAD>
<TITLE>
网页标题
</TITLE>
</HEAD>
<BODY>
你的网页内容.
</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>"
这个脚本的使用格式如下:
有一种说法,最伟大的程序员同样是最懒的家伙.他们编写程序来节省他们的工作时间.同样,当聪明的程序员编写程序时,他们也争取减少他们的击键次数.
同理,我们对上述脚本的第一项改进便是通过here脚本来替换重复使用的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_
here脚本(有时被称为here文档)是输入输出重定向的一种附加格式程序.通过它向shell的标准输入提供内容.在上面的脚本中,cat命令将从我们脚本中获取的输入数据作为shell的标准输入.
一个here脚本的格式如下:
command << token 用作命令标准输入的内容 token
token 可以用任意字符串来代替. 我使用 "_EOF_" (EOF为"End Of File"的缩写) 因为这是一种惯例,但你可以使用任意字符串来替代, 但该字符串不能与bash内置的保留字符串相冲突. 位于脚本末尾的token必须与脚本开始处的token完全一致, 否则脚本的其它内容将被shell视为更多的命令标准输入来解释.
这有一个惯用的技巧来改进here脚本.通常你想通过缩进脚本内容来提高脚本的可读性.你可以将脚本编辑成以下形式:
#!/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忽视here脚本中的打头的空格.这样,从cat命令生成的标准输出就不会在开始处含有空格或者tab符号.
O.k., 让我们继续. 我们将缩回我们的页面来显示一些信息:
#!/bin/bash
# make_page - A script to produce an HTML file
cat <<- _EOF_
<HTML>
<HEAD>
<TITLE>
My System Information
</TITLE>
</HEAD>
<BODY>
My System Information
</BODY>
</HTML>
_EOF_
在下一节中,我们将继续完善here脚本来显示系统的真实信息.
© 2000-2007, William Shotts, Jr. Verbatim copying and distribution of this entire article is permitted in any medium, provided this copyright notice is preserved.
Linux® is a registered trademark of Linus Torvalds.

