shell写cgi脚本

第29章 cgi脚本
本章包含内容:
基本cgi脚本
使用服务器端内嵌(Server Side Includes,SSI)
get方法
post方法
创建交互式脚本
能够自动重载web页面得cgi脚本
cgi是一种规范,它规定了获取信息得教本如何从服务器中取得信息或向服务器中写入信息.这种脚本或cgi
教本可以用任何语言来实现.最流行的是Perl语言,不过你将会发现,也可以用普通的shell脚本来实现.
所有得cgi脚本都应当位于web服务器的cgi-bin目录中,不过在不同的服务器中该目录会有所不通.可以通
过查看配置文件srm.conf中ScriptAlias一段来改变该目录的位置,并允许该服务器运行cgi脚本.所有的教本
文件名都应以.cgi做后缀.而其他web页面都位于html货htdocs目录下,并带有.html后缀.
29.1 cgi脚本实例:
$ vi firstpage.cgi
$!/bin/bash
# firstpage.cgi
echo "Content-type: text/html"
echo ""
echo ""
echo " THIS IS MY FIRST CGI PAGE"
echo ""
echo "STAND-BY TO STAND-TO!"
echo ""
第一行表示shell解释器的路径.第一个echo命令行告诉服务器这是一个MIME题头,第二行echo 命令行用于
显示一个空行.如果在MIME题头后面没有一个空行,cgi脚本的输出将无法正确显示.
29.2 显示shell命令输出

在脚本中加入一条shell命令,这样就可以在浏览器中显示该命令的输出.
例如显示当前登陆得用户数,通过将who命令的输出经管道传递给wc命令就可以实现.并显示当前日期.
$ vi pagetwo.cgi
#!/bin/bash
#pagetwo.cgi
#display a page using the output from a unix command
MYDATE=`date +%A" "%d" "%B" "%Y`
USERS=`who |wc -l`
echo "Content-type: text/html"
echo ""
echo ""
echo " THIS IS MY SECOND CGI PAGE"
echo ""
echo "$MYDATE"
echo "Total amount of users on to-day is :$USERS"
echo ""
if ["$USERS" -lt 10 ]; then
echo "It must be early or it is dinner time"
echo "Beacuse there ain's many users logged on"
fi
echo ""
echo ""
29.3 使用SSI
为了内嵌cgi脚本,必须使用服务器端内嵌(SSI),这样,在显示一个页面时,它将会把SSI命令替换为相应命令
或脚本的输出.
在apache上的配置为:
Addhandler server-passed.shtml
Addtype text/htm shtml
第30章 常用shell命令
1.basename
格式: basename path
base命令能从路径中分离出文件名,通常用于shell脚本中,例:
$ basename /home/smallfish/ifcp
ifcp
2.cat
格式: cat options files
-v:显示控制字符
cat是最常用得文本文件显示命令
$ cat myfile
文件合并:
$ cat myfile myfile2 >>hold_file
3.cp
格式: cp options file1 file2
选项:
-i:在覆盖文件之前提示用户,由用户确认.
-p:保留权限模式和更改时间.
-r:拷贝相应得目录及其子目录.
4.diff
格式: diff options file1 file2
选项:
-c: 按照标准格式输出
-I:忽略大小写
5.dirname
格式: dirname pathname
该目录正好和basename相反,它返回路径部分:
$ dirname /home/smallfish/ifcp
/home/smallfish
6.du
格式: du options directory
选项:
-a: 显示每个文件的大小,不仅是整个目录所占用的空间
-s: 只显示总计
du显示得磁盘空间占用是以512字节的块来表示得.它主要用于显示目录所占用的空间.
du -s .
5611 .
7.file
格式: file filename
该命令用来确定文件类型:
$ file ifcp
ifcp: Bourne-Again shell script text executable
$ file mbox
mbox: ASCII mail text
8.fuser
格式: fuser options file
选项:
-k: 杀死所有访问该文件或文件系统的进程
-u: 显示访问该文件或文件系统的所有进程
fuser命令可以显示访问某个文件或文件系统的所有进程.在有些系统上,-u 和-m选项可以互换.还可以在if
语句中使用fuser命令.
列出/dev/hda8上所有活动进程:
$ fuser -m /dev/hda8
/dev/hda8:            2043e  2081m  2114e  2267e  2343e  2376e  2396e  2420e  2431e  2441e  2500e  
2519e  2529e  2543e  2554e  2561  2561m  2955  2955c  2955e  3183e  3185e  3186m  3430e
11786m 11787m 11960m
9.head
格式: head -number files
head命令可以显示相应文件的前10行.如果希望指定显示的行数,可以使用-number选项.
显示trap2.sh文件第一行:
$  head -1 trap2.sh
#!/bin/bash
10.logname
格式: logname
显示当前所使用的登陆用户名:
$ logname
smallfish
11.mkdir
格式: mkdir options directory
选项:
-m: 在创建目录时按照该选项的值设置访问权限.
12. more
格式: more options files
该命令和page及pg命令的功能相似,都能分屏显示文件内容.
选项:
-c: 不滚屏,而是通过覆盖来换页
-d: 在分页处显示提示
-n:每屏显示n行
13.nl
格式: nl options file
选项:
-I: 行号每次增加n,缺省为1
-p: 在新的一页不重新计数
nl命令可用于在文件中列行号,在打印源代码或日志文件时很有用.
列出文件行号:
$ nl myscript 
14.printf
格式: printf format arguments
该命令有点类似于awk命令的printf函数,它将格式化文本送至标准输出.其中,格式符format包含三种类型
的项,这里只讨论格式符:
%[- +]m.nx
其中横杆-为从行首算起的起始位置。一般说来m表示域的宽度n表示域的最大宽度.'%'后面可跟下列格式
字符:
s: 字符串
c: 字符
d: 数字
x: 16进制数
o: 10进制数
printf命令本身并不会产生换行符,必须使用转义字符来实现这样的功能。下面是最常用的转义字符:
\a: 响铃
\b:退格
\r:回车
\f:换页
\n:换行
\t:跳格
$ printf "abc\n"
abc
$ printf "abc\n\t"
abc
        [smallfish@localhost ~]$
15.pwd
格式: pwd
显示当前工作目录:
$ pwd
/home/smallfish
16.rm
格式: rm options files
选项:
-i: 在删除文件之前给出提示(安全模式)
-r: 删除目录
rm命令能够删除文件或目录
17.rmdir
格式: rmdir options directory
选项:
-p: 如果相应的目录为空目录,则删除该目录
18.script 
格式: script option file
-a: 将输出附加在文件末尾
可以使用script命令纪录当前会话.只要在命令行键入该命令即可。该命令在你退出当前会话时结束。它
可以将你的输入纪录下来附加到一个文件末尾。
$ script mylogin
Script started, file is mylogin
19.sleep
格式: sleep number
该命令使系统等待相应的秒数,如:
$ sleep 10
意味着系统在10秒钟之内不进行任何操作。
20. strings
格式: strings filename
该命令可以看二进制文件中所包含的文本。
21. touch
格式: touch options filename
选项:
-t MMDDhhmm 创建一个具有相应月\日\时\分时间戳的文件
$ touch -t 0710150000 myfile
-rw-rw-r--  1 smallfish smallfish 0 Oct 15 00:00 myfile
22.tty
格式: tty
可以使用tty来报告所连接的设备或终端.
$ tty
/dev/pts/4
23.wait
格式: wait process ID
该命令可以用来等待进程号为process ID的进程或所有的后台进程结束后,再执行当前脚本.
等待进程号为1299的进程结束后再执行当前脚本:
$ wait 1299       
等待所有的后台进程结束后再执行当前脚本:
$ wait
24.wc
格式: wc options files
选项: 
-c: 显示字符数
-l: 显示行数
-w: 显示单词数
25.whereis
格式: whereis command_name
whereis 命令能够给出系统命令的二进制文件及其在线手册的路径
$ whereis dirname
dirname: /usr/bin/dirname /usr/share/man/man1/dirname.1.gz /usr/share/man/man3/dirname.3.gz 
/usr/share/man/man1p/dirname.1p.gz /usr/share/man/man3p/dirname.3p.gz
26.who
格式: who options
选项:
-a: 显示所有的结果
-r: 显示当前的运行级别
-s: 列出用户名及时间域
查看自己用户名:
$ whoami
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值