shell寫cgi指令碼
來源:互聯網
上載者:User
第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命令可用於在檔案中列行號,在列印原始碼或記錄檔時很有用.