使用shell script启动一个项目-报告生成器:从网页开始
第一阶段:最小的文档
下面是一个最简单的HTML文档:
<HTML>
<HEAD>
<TITLE>Page Title</TITLE>
</HEAD>
<BODY>
Page body.
</BODY>
</HTML>
定义其文件名为:foo.html。在主机中的位置为foo_path(查看位置后,将实际位置替换该变量即可)。
在浏览器中输入:“file:///foo_path/foo.html”这个URL地址即可查看文件。
再创建一个名为:sys_info_page.sh的文件。并输入以下程序:
#!/bin/bash
#program to output a system information page
echo "<HTML>
<HEAD>
<TITLE>system information report</TITLE>
</HEAD>
<BODY>
<H1>system information report</H1>
</BODY>
</HTML>"
保存文件。
在命令行输入:
chmod 755 sys_info_page.sh
./sys_info_page.sh
即可看到这个 HTML文档中的文本显示在屏幕上。
如何使用浏览器查看网页呢?
在命令行输入:
./sys_info_page > sys_info_page.html
open sys_info_page.html(基于mac)
或:
firefox sys_info_page.html(基于linux)
即可。
第二阶段:加入一些数据
常量和变量
shell script中,常用大写字母表示常量,用小写字母来表示变量。我们将sys_info_page.sh文件稍作修改:增加一个常量来代替以后会多次出现的字符串等,这样在需要修改的时候,只需要在常量的定义处进行修改即可。
#!/bin/bash
#program to output a system information page
TITLE="system information report FOR $HOSTNAME"
echo "<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
</BODY>
</HTML>"
注意到代码中的$HOSTNAME,HOSTNAME是你本机的名称。
下面,把报告创建的日期、时间以及报告创建者的用户名加入代码中:
使用here文档添加内容
here文档是I/O重定向的另外一种方式,我们在脚本中嵌入正文文本,然后将其输出到一个命令的标准输入中,其工作方式如下:
command << token
text
token
其中,command是接受标准输入的命令名,token用来指示嵌入文本的结尾。现在使用here文档来改写我们的sys_info_page.sh文档。
#!/bin/bash
#program to output a system information page
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"
TITLE="system information report FOR $HOSTNAME"
cat << _EOF_
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<H1>$TITLE</H1>
<P>$TIME_STAMP<P>
</BODY>
</HTML>
_EOF_
这里用cat和EOF字符串替换echo达到了一样的效果。这样有什么好处呢?
如下图:
我们可以看到:
这里shell将引号看做了普通字符输出。这样以来,我们就可以在here文档中随意嵌入引号。
另外,here文档接受标准输入和任何命令一起使用,这里,我们向ftp程序传递一系列的命令,从而从远程ftp服务器上获取一个文件。
#!/bin/bash
#script to retrieve a file via FTP
FTP_SERVER=ftp.n1.dabian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom
REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << EOF
open $FTP_SERVER
user anonymous me@linuxbox
cd $FTP_PATH
hash
get $REMOTE_FILE
bye
EOF
ls -l $REMOTE_FILE