一道企业shell编程实战题 http://oldboy.blog.51cto.com/2561410/1657042

本脚本对http://edu.51cto.com/的视频具有通用性,暂未发现bug,如有发现,请看官自行解决。j_0016.gif

先上脚本

[root@mysql scripts]# cat html_to_table.sh        
#!/bin/bash
# oldboy linux training
# 2015-06-01
# Happy Children's Day
# 说明:本脚本来自老男孩linux21期学员张耀开发!
EduFile=/tmp/edu.html
EduFile2=/tmp/edu2.html
Url="$*"

# Check for given parameters 
[ $# -eq 0 ] && {
   echo "USAGE: /bin/sh $0 http://...."
   exit 1
}

# Judge url is ok?
curl -I $Url &>/dev/null 
[ $? -ne 0 ] &&{
   echo "Bad url,Please check it"
   exit 1
}

# Defined get pagenum and CourseId Functions
function getnum(){
        curl -s $Url>$EduFile
        grep '"pagesGoEnd"' $EduFile &>/dev/null
        if [ $? -eq 0 ]
          then
            num=`sed -rn 's#.*page=([0-9].*)" class="pagesGoEnd".*$#\1#gp' $EduFile`
        else
            num=`sed -rn 's|.*page=([0-9].*)#" class="pagesNum".*$|\1|gp' $EduFile`
        fi
        pagenum=${num:-1}
        CourseId=`echo $Url|awk -F "[-.]" '{print $4}'`
}


# Defined curl html Functions
function Curl(){
        getnum
        for i in `seq $pagenum`
          do 
            curl "http://edu.51cto.com/index.php?do=course&m=lessions&course_id=$CourseId&page=$i" 1>>$EduFile 2>/dev/null
        done
}

# Defined Create table Functions
function table(){
        sum=""
        index=1
        sed -rn '/do=lesson/ s#<.*(<a href=")(.*)</h4>#\1http://edu.51cto.com\2#gp' $EduFile > $EduFile2
        while read line
          do
            sum=$sum"<tr><th width="40" scope="row">$index</th><td width="520">$line</td>"
            ((index++))
        done <$EduFile2
}

# Defined Create html Functions
function html(){
        cat >/tmp/oldboy.html<<-END
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>test</title>
        </head>

        <body>
        <table width="560" border="1">
        $sum
        </table>
        </body>
        </html>
        END
}

function main(){
        Curl
        table
        html
}

main


测试网页http://edu.51cto.com/course/course_id-839.html

[root@mysql scripts]# sh html_to_table.sh http://edu.51cto.com/course/course_id-839.html 
[root@mysql scripts]# sz /tmp/oldboy.html

我将网页文件的table部分粘贴上来



1合格运维素质及挖掘内心学习动力
2老男孩23期开班注意事项
3跟着老男孩可以学到什么本领--老男孩核心教育思想
4学习运维到底该学习什么-老男孩核心教育思想
5培养好的学习听课思维习惯
6学好运维的思想转变
7培养自己成为素质人才
8如何才能学好linux运维重要思想-老男孩核心理念
9计算机及网站服务器硬件-机箱-电源介绍01
10计算机及网站服务器硬件-主板-CPU-内存-硬盘02
11硬件体系优化及IO优化核心优化原理详解
12其他硬件信息简单介绍
13计算机硬件重要知识点总结01
14计算机硬件重要知识点总结02
15课后作业及内容预习
16上节知识内容回顾
17操作系统介绍及作用讲解
18什么是linux及特点
19Unix的历史介绍
20Unix的5大优秀特性
21Unix操作系统革命故事
22Linux的诞生介绍
23Linux的发展历程介绍
24Linux发展过程中的重要必知人物
25自由软件的概念介绍
26自由软件基金会FSF介绍
27插入一段学习运维的重要思想
28GNU核心知识介绍
29GPL核心知识介绍
30Linux系统的组成
31Linux为什么受欢迎
32Linux的重要特点集合介绍
33Linux的三大企业应用领域介绍
34Linux的各类发行版及区别
35如何选择Linux版本学习专家建议
36Centos的版本介绍及选择建议
37搭建Linux学习环境的重要建议
38安装及创建vmware虚拟机实战
39vmware核心技术网卡三种模式之NAT介绍
40vmware核心技术网卡三种模式之bridged介绍
41vmware核心技术网卡三种模式之HOST-ONLY模式介绍
42实战完成创建新的VM寻虚拟机
43Centos6.6安装初步及安装可能的故障讲解
4432位和64位Linux的区别介绍
45开始实战安装Centos Linux系统
46Linux系统磁盘分区知识介绍
47Linux设备的命名及Linux基本分区方案
48Linux分区类型raid-lvm介绍及企业选择建议
49linux分区重要知识介绍-挂载点-文件系统类型等
50Linux关键包选择讲解及安装完成
51重启引导及Linux内核版本号介绍
52IP地址介绍及为Linux配置IP地址
53网卡设置的相关问题答疑
54SSH客户端连接服务器故障问题分析与解决
55老男孩第一关命令考试vi-vim-cat-touch-echo命令讲解
56老男孩第一关命令考试-重定向-追加重定向-标准输入输出知识实战
57老男孩第一关命令考试-cat-cp命令企业应用实战
58老男孩第一关命令考试-mv-ls-man-help等核心命令实战讲解
59课后作业与预习
60重要运维思想之观察和总结案例
61重要运维思想之如何与高手愉快交往问问题
62重要运维思想之如何和别人请教问题细节
63抓住高手的心-让他不回答你都难
64上节内容简单复习回顾
65find命令企业及应用案例精讲
66删除目录及特殊字符单双点重点讲解
6708-cat-grep-sed企业重点案例应用讲解
68mkdir-yum-rpm-tree命令应用案例讲解
69学好linux命令的重要学习思想
70tree-rpm命令使用深入
71别名的深度企业案例多种方法讲解
72linux别名深层原理-作用-实战讲解
73特殊家目录符号介绍
74结合企业面试引出seq命令深度讲解
75tail命令企业应用及解决实际面试题案例
76sed企业级面试应用案例讲解-打印行号
77awk命令使用介绍及实战讲解
78利用awk命令解决企业级面试应用案例
79grep命令解决企业案例应用实战讲解及画图重要思想
80sed命令替换功能深度应用详解及总结
81复杂企业级应用案例find配合sed综合实战讲解
82第一关命令应用学习总结及大扩展命令重要讲解
83Linux命令行重要快捷键讲解
84SSH远程连接原理及故障排错详解
85SSH客户端的使用技巧1
86SSH远程连接故障排错详解
87SSH客户端实现和LINUX共享文件
88利用SSH客户端批量管理LINUX重要应用
89SSH客户端复制标签机批量复制标签小技巧
90VM快照-克隆重要应用讲解及克隆后网卡问题解决
91查看Linux基本信息命令-uname-hostname及重要运维思想
92Linux系统useradd-passwd添加账号密码讲解及su命令介绍
93Linux优化之Selinux详解及运行级别详解
94Linux优化之需要开机启动的重点服务详解
95Linux优化之利用chkconfig-sed-awk多种方法解决开机启动实战
96Linux优化之iptables防火墙处理及运维思想
97chkconfig命令应用小结
98Linux优化之安全最小化5个思想
99课后作业与预习
100重要基础命令回顾复习
101极重要基础命令三剑客加find回顾复习实战
102sed命令实战复习回顾
103awk命令实战复习回顾
104grep命令实战复习回顾
105上节Linux优化项复习
106超级优化Linux远程SSH连接
107比较工具diff-vimdiff-windows比较工具讲解
108运维思想-成功最有效的方法
109形象讲解sudo命令简单原理及实践优化用户使用命令
110sudo解决方案企业级应用实战讲解
111运维核心学习思想-总裁班分享潜意识问题
112which命令实战及原理详解-PATH实战配置
113有关bash内置命令特殊性问题讲解
114Linux字符集介绍及解决中文乱码实战
115运维核心思想-学会帮助鼓励别人
116时间同步介绍及实战配置-介绍定时任务及简单配置
117时间同步服务企业生产应用架构说明
118优化终端超时以及历史记录数
119Linux历史记录数控制及隶属记录数文件控制
120文件描述符介绍作用及实战配置方案
121Linux内核参数基础优化
122隐藏LINUX软件名及内核版本
123超级优化锁定系统重要系统文件防止篡改
124禁PING以及清理系统多余账号说明
125为grub引导菜单加密码保护grub被随意修改
126禁PING实战及软件漏洞升级
127linux系统基础优化16条知识汇总
128配置Linux软件下载更新源地址
129wget命令企业级应用参数详解
130讲过命令回顾及分类总结方法说明
131less-more使用方法及区别实战讲解
132Linux目录结构知识介绍
133Linux目录结构树详细原理讲解
134Linux目录结构的历史介绍
135Linux目录层次标准及目录介绍
136linux重要目录及子目录介绍详解
137Linux目录结构重点小结回顾
138课后作业与预习