@cyysu
        
        2017-10-23T12:45:31.000000Z
        字数 3618
        阅读 870
    
- 时间:2017年10月23日
 - 作者:Kali
 - 邮箱:cyysu.github.io@gmail.com/2869905223@qq.com/微信lwyx1413
 - 版本:4.0
 - 描述:ARM上的html代码实现。
 
嵌入式Linux
CGI主要的功能是在WWW环境下,藉由从客户端传递一些讯息给WWWServer,再由WWWServer去启动所指定的程式码来完成特定的工作。所以更明确的说,CGI仅是在WWWServer上可执行的程式码,而她的工作就是控制讯息要求而且产生并传回所需的文件。使用CGI,你的Server可以读取并显示在客户端无法读取的格式(像是SQLDataBase)。而且可以像闸道(Gateway)一样,在伺服端和客户端之间,产生客户端所需要的讯息。基本上,在此种主从式(Client/Server)的环境之下,其IPC(InterProcess Communication)的协定是利用讯息传递及记忆体分享(环境变数)的方式来完成。CGI有其特定的写法及规格,必须遵守其原则,方可达到主从端资讯交流的目的。
#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbini="0"echo -e "Content-type: text/html \n\n"echo "<html>"echo "<head>"echo "<title>系统状态</title>"echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"echo "</head>"echo "<body>"echo "<center>"echo "<h3>系统状态(5秒刷新一次)</h3>"echo "</center>"echo "<hr>"echo "<script>"echo "setTimeout(\"javascript:location.href='./system.cgi'\", 5000);"echo "</script>"echo "<center>"echo "<form>"echo "<table width=\"75%\" style=\"table-layout:fixed;\">"echo "<tr>"echo "<td>服务名</td>"echo "<td>内存使用率</td>"echo "<td>当前状态</td>"echo "</tr>"wr top -n 1 > /tmp/top.txtcat /tmp/top.txt | head -n 14 | tail -n 11 | while read linedoi=`expr $i + 1`if [[ $i -eq 1 ]];thencontinueficommand=`echo ${line} | awk '{print $8}'`memory=`echo ${line} | awk '{print $6}'`cpu=`echo ${line} | awk '{print $7}'`echo "<tr>"echo "<td>"${command}"</td>"echo "<td>"${memory}"</td>"echo "<td>"${cpu}"</td>"echo "</tr>"doneecho "</table>"echo "</form>"echo "<br>"echo "<hr>"# 显示运行程序表格echo "<h3>正在运行的应用程序</h3>"echo "<form>"echo "<table width=\"75%\" style=\"table-layout:fixed;\">"echo "<tr>"echo "<td>应用程序名称</td>"echo "<td>  </td>"echo "<td>当前状态</td>"echo "</tr>"# 这里查OPENCUA进程是否在运行appName=`ps -a | grep -i OPEN | grep -v grep | cut -d " " -f7`if [ "$appName" = "" ];thenstatus="挂起"appName="./OPUCA"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="red">"${status}"</font></td>"echo "</tr>"elsestatus="运行"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="green">"${status}"</font></td>"echo "</tr>"fi# 这里查NEWTON进程是否在运行appName=`ps -a | grep -i NEWTON | grep -v grep | cut -d " " -f7`if [ "$appName" = "" ];thenappName="./NEWTON"status="挂起"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="red">"${status}"</font></td>"echo "</tr>"elsestatus="运行"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color=\"green\">"${status}"</font></td>"echo "</tr>"fi# 这里查MODBUS进程是否在运行appName=`ps -a | grep -i MODBUS | grep -v grep | cut -d " " -f7`if [ "$appName" = "" ];thenstatus="挂起"appName="./MODBUS"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="red">"${status}"</font></td>"echo "</tr>"elsestatus="运行"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="green">"${status}"</font></td>"echo "</tr>"fi# 这里查MQTT进程是否在运行appName=`ps -a | grep -i MQTT | grep -v grep | cut -d " " -f7`if [ "$appName" = "" ];thenstatus="挂起"appName="./MQTT"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="red">"${status}"</font></td>"echo "</tr>"elsestatus="运行"echo "<tr>"echo "<td>"${appName}"</td>"echo "<td></td>"echo "<td><font color="green">"${status}"</font></td>"echo "</tr>"fiecho "</table>"echo "</form>"echo "</center>"echo "</body>"echo -e "</html>\n\n"
我这里举的例子是ARM板的web控制终端。我们这里采用的是shell方式去编写的程序,当然我们还可以采用其他脚本编写,比如C或者python,在比如perl等等。通过观察上面的例子我们可以发现这不就是在编写脚本嘛,对没错,其实这就是编写脚本,只不过在浏览器那边访问的时候这些代码被解析成了html代码,这样就可以看到我们网页了,如果这些程序在没有启动http服务器的那么浏览器访问的就是这些文件的内容。
由于PC上有很多http服务器了,这里我给出一个arm端的http服务器。
这里说明一下使用方法: 
    将这个程序放入你的网站根目录,程序会默认寻找你根目录下的index.html去解析,同时他还支持加入h5或者css3等网页解析。程序默认开启的端口是8080。下面给出一个效果图。
[root@3352-T web]# lsbanner.html css/ img/ logo.html test.html webs*bottom.html graphics/ index.html main.html tree.htmlcgi-bin/ httpd* js/ menu.html um/

这里给一个演示动画。

                    支付宝                                                         微信