LinuxCommand
Learning the
shell
Writing
shell scripts
Script
library
SuperMan
pages
Who, What,
Where, Why
|
Here Scripts
In the following lessons we will construct a
useful application. This application will produce
an HTML document that contains information about
your system. I spent a lot of time thinking about
how to teach shell programming and the approach I
have come up with is very different from most
approaches that I have seen. Most favor a rather
systematic treatment of the many features, and
often presume experience with other programming
languages. Although I do not assume that you
already know how to program, I realize that many
people today know how to write HTML, so our first
program will make a web page. As we construct our
script, we will discover step by step the tools
needed to solve the problem at hand.
As you may know, a well formed HTML file
contains the following content:
|
|
<HTML>
<HEAD>
<TITLE>
The title of your page
</TITLE>
</HEAD>
<BODY>
Your page content goes here.
</BODY>
</HTML>
|
|
Now, with what we already know, we could a write
a script to produce the above content:
|
|
#!/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>"
|
|
This script can be used as follows:
|
|
[me@linuxbox me]$ make_page > page.html
|
|
It has been said that the greatest programmers
are also the laziest. They write programs to save
themselves work. Likewise, when clever programmers
write programs, they try to save themselves
typing.
The first improvement to this script will be to
replace the repeated use of the echo command with a
here script, thusly:
|
|
#!/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_
|
|
A here script (also sometimes called a here
document) is an additional form of I/O redirection. It provides a
way to include content that will be given to the
standard input of a command. In the case of the
script above, the cat command was given a stream of
input from our script to its standard input.
A here script is constructed like this:
|
|
command << token
content to be used as command's standard input
token
|
|
token can be any string of characters. I
use "_EOF_" (EOF is short for "End Of File")
because it is traditional, but you can use anything
as long as it does not conflict with a bash
reserved word. The token that ends the here script
must exactly match the one that starts it, or else
the remainder of your script will be interpreted as
more standard input to the command.
There is one additional trick that can be used
with a here script. Often you will want to indent
the content portion of the here script to improve
the readability of your script. If you change the
script as follows, you can do this.
|
|
#!/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_
|
|
Changing the the "<<" to "<<-"
causes bash to ignore the leading whitespace in the
here script. The output from the cat command will
not contain any of the leading spaces or tab
characters.
Ok, let's make our page. We will edit our page
to get it to say something:
|
|
#!/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_
|
|
In our next lesson, we will make our script
produce real information about the system.
|
|
Previous | Contents
|
Top | Next
|
|
© 2000-2002, William
Shotts, Jr. Verbatim copying and distribution
of this entire article is permitted in any medium,
provided this copyright notice is preserved.
|