Linux 探索之旅 | 第五部分第七课:Shell 实现图片展示网页
-- 作者 谢恩铭 转载请注明出处
《Linux探索之旅》全系列
内容简介
- 前言
- 成果展示
- 生成缩略图
- 我的答案
- 可能的优化
- 第五部分第八课预告
1. 前言
今天的封面图片是不是比较搞笑?哈哈... Linux Freedom (Linux 自由)。
我第一次看到这张 Linux 企鹅版自由女神像的时候,笑不动了。
好吧,我笑点低...
上一课 Linux探索之旅 | 第五部分第六课:一朝Shell函数倾,斗转星移任我行 中我们学习了 Shell 中很关键的知识点 :函数。
既然我们已经基本学完了 Shell 的基础知识,是时候实战演练一下了。
在这个练习中,我们将会综合运用之前学习过的一些 Shell 和 Linux 知识点。别忘了,我们在 Shell 程序中是可以调用 Linux 命令的,例如:
ls
cp
mv
grep
cut
mkdir
sort复制代码
还有 「管道、流、重定向」 ( Linux探索之旅 | 第三部分第二课:流、管道、重定向,三管齐下 )等等。
你也许还会在使用一些命令时忘了如何用,那你可以查一下命令的使用手册 ( Linux探索之旅 | 第二部分第八课:RTFM 阅读那该死的手册 )。
本练习需要实现的项目是:
创建一个网页,这个网页展示一系列图片 (有点像一个画廊,Gallery ),而展示的图片是存放在本地的一个文件夹里的。
说起来总比做起来简单,你将会发现这是个不小的挑战。
话休絮烦,我们开始吧。
2. 成果展示
首先,我们给脚本文件起名叫 gallery.sh (gallery 是英语「画廊」的意思)
对于这个练习的第一个版本,我们暂时把脚本文件放在一个目录中,这个目录包含了要展示的所有图片。
这个脚本会为我们生成一个 HTML 文件,这个 HTML 文件就是一个网页文件,用来展示这些图片。
因此,这个脚本需要依次做以下的事:
根据目录中的每张图片,生成对应缩略图。
生成一个 HTML 文件,把缩略图都插入其中。
给每张缩略图绑定一个链接,会链接到原始图片。
为了写出这个脚本,需要有一些前端的网络知识,比如 HTML。
如果对 Web 开发不是很了解,可以先去看看我的 《 Web 探索之旅 》这个电子书。
当然了,如果你没有前端的知识也不要紧,跟着我写就可以了。
给出一个 HTML5 的基本的图片例子代码:
<!DOCTYPE html>
<html><body><h2>Spectacular Mountain</h2>< img src="pic_mountain.jpg" alt="Mountain View" style="width:304px;height:228px;" ></body>
</html>复制代码
最终成品
你将要用脚本来生成的网页是像下面这样的:
你点击这 8 张图片中的任意一张,都会跳转到原始图片。
当然了,这只是初级版本,你可以优化。不过编程不就是循序渐进的嘛,首先做出一个可以运行的版本,之后再「添砖加瓦」。
3. 生成缩略图
这是个好问题。我们在 Linux 探索之旅 的过程中可没有学过如何为图片生成缩略图。
缩略图:
缩略图的英文是 thumbnail。代表网页上或计算机中图片经压缩方式处理后的小图,其中通常会包含指向完整尺寸的图片的超链接。
为了不让你纠结,我就告诉你我们要用到的命令吧。
其实有一个 convert 命令,就可以帮助我们从图片生成缩略图。
convert 是英语「转换」的意思。
convert 命令有好多参数,可以用来做很多事情。对于生成缩略图,我们需要用到的参数就是 -thumbnail 。前面说了,thumbnail 就是「缩略图」的意思。
我们的脚本接收一个参数,就是要生成的 HTML 的文件名。如果没有给出文件名,那么就用默认的 gallery.html。
好了,如果你有基本的 HTML 的知识。那么已经可以开始写了。如果还不知道 HTML,那么可以去看一下 W3C 推出的官方教程:
- 英文版 :www.w3schools.com/html/defaul…
- 中文版 :www.w3school.com.cn/html/index.…
4. 我的答案
我给出我的解法,你的代码当然不必和我一样,但我想基本原理是一样的。
#!/bin/bash# Verification of parameter
# If no parameter, use a default valueif [ -z $1 ]
thenoutput='gallery.html'
elseoutput=$1
fi# Preparation of files and foldersecho '' > $outputif [ ! -e thumbnails ]
thenmkdir thumbnails
fi# Beginning of HTML
echo '<!DOCTYPE html><head><title>My Gallery</title></head><body><p>' >> $output# Generation of thumbnails and the HTML web page
for image in `ls *.jpg *.png *.jpeg *.gif 2>/dev/null`
doconvert $image -thumbnail '200x200>' thumbnails/$imageecho '<a href="'$image'">< img src="thumbnails/'$image'" alt=""/></a>' >> $output
done# End of HTML
echo ' </p></body>
</html>' >> $output复制代码
我们依顺序解释一下上面的代码:
首先,我们确认用户有没有输入表示脚本名字的参数:如果输入了参数,那么我们的脚本就被命名为用户输入的那个名字;如果没有输入参数,那么用默认的脚本名字 gallery.sh。
确保脚本文件被清空。就是那行
echo '' > $output
所做的工作。如果要存放图片缩略图的目录(取名叫「 thumbnails 」)不存在,那么创建它。
把 HTML 文件的开头写入脚本文件。
做一个 for 循环,遍历当前目录下所有常用的图片格式的文件。对每一个被遍历到图片,用 convert 命令生成缩略图(用
-thumbnail
参数),缩略图尺寸是 200 x 200,缩略图都存放到 thumbnails 这个子目录下。代码中的 200x200 后面紧跟的
>
符号是为了达到「 如果原始图片的尺寸已经小于 200 x 200,那么就直接用原始图片,不需要为之生成缩略图 」的目的。参见 convert 命令的文档(man convert
)。对于每一个被 for 循环遍历到的图片,我们将其标签用 echo 写入脚本,并添加链接到原始图片的链接。
把 HTML 文件的结尾写入脚本文件。
5. 可能的优化
正如我之前所说,我们给出的解方是最基础的,你可以在此基础上做不少优化。
下面提出几点优化的设想:
- 对网页的样式做一定优化,需要用到 CSS 文件。
- 使用户能够选择包含要展示的图片的目录。对于我们上面的程序,要展示的图片必须和脚本文件在同一个目录下。
- 为脚本添加一个参数,用于指定缩略图尺寸。
- 在每张缩略图下面显示图片的名字。
- 在每张缩略图下面显示图片的其他信息,例如:图片原始尺寸,最近一次修改图片的时间,等等。要获取这些信息,需要调用 convert 命令。
要完成这些优化,你需要自己去查找一些手册,看一些文档,做一些测试。
但是请相信我,你会很享受这种学习的过程。如果不经历这样自我学习的过程,何来提高呢?对吧。
6. 第五部分第八课预告
今天的课就到这里,一起加油吧!
下一课我们来做一个 Shell 脚本的进阶练习:Linux探索之旅 | 第五部分第八课:用Shell做统计练习
微信公众号「程序员联盟」ProgrammerLeague
我是谢恩铭,在巴黎奋斗的软件工程师。
我的简介
我的经历
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」
Linux 探索之旅 | 第五部分第七课:Shell 实现图片展示网页相关推荐
- Linux 探索之旅 | 第五部分第六课:一朝 Shell 函数倾,斗转星移任我行
-- 作者 谢恩铭 转载请注明出处 内容简介 前言 函数的作用 函数的定义 传递参数 返回值 变量作用范围 重载命令 函数的设计 总结 第五部分第七课预告 1. 前言 上一课 Linux探索之旅 | ...
- Linux 探索之旅 | 第五部分第八课:用 Shell 做统计练习
-- 作者 谢恩铭 转载请注明出处 <Linux探索之旅>全系列 内容简介 前言 成果展示 解题步骤和答案 可能的优化 第五部分第九课预告 1. 前言 上一课 Linux探索之旅 | 第五 ...
- Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路
-- 作者 谢恩铭 转载请注明出处 内容简介 前言 while 循环 until 循环 for 循环 总结 第五部分第六课预告 1. 前言 上一课 Linux探索之旅 | 第五部分第四课:条件一出,S ...
- Linux 探索之旅 | 第三部分第四课:后台运行及合并多个终端
-- 作者 谢恩铭 转载请注明出处 内容简介 第三部分第四课:后台运行及合并多个终端 第三部分第五课预告:延时执行,唯慢不破 后台运行及合并多个终端 上一课 Linux探索之旅 | 第三部分第三课:监 ...
- 【Linux探索之旅】第二部分第三课:文件和文件夹,组织不会亏待你
内容简单介绍 1.第二部分第三课:文件和文件夹,组织不会亏待你 2.第二部分第四课预告:文件操纵.鼓掌之中 文件和文件夹,组织不会亏待你 上一次课我们讲了命令行,这将成为伴随我们接下来整个Linux课 ...
- 【Linux探索之旅】第一部分第四课:磁盘分区,并完毕Ubuntu安装
内容简单介绍 1.第一部分第四课:磁盘分区,并完毕Ubuntu安装 2.第一部分第五课预告:Unity桌面,人生若仅仅如初见 磁盘分区 上一课我们正式開始安装Ubuntu了.可是到了分区的那一步.小编 ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 1.第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的 ...
- Linux 探索之旅 | 第三部分第五课:延时执行,唯慢不破
-- 作者 谢恩铭 转载请注明出处 内容简介 第三部分第五课:延时执行,唯慢不破 第三部分第六课预告:第三部分测验题 延时执行,唯慢不破 上一课 Linux探索之旅 | 第三部分第四课:后台运行及合并 ...
- Linux 探索之旅 | 第四部分第二课:SSH 连接,安全快捷
-- 作者 谢恩铭 转载请注明出处 内容简介 第四部分第二课:SSH连接,安全快捷 第四部分第三课预告:文件传输,潇洒同步 SSH连接,安全快捷 上一课是 Linux探索之旅 | 第四部分第一课:压缩 ...
- 【C++探索之旅】第一部分第八课:传值引用,文件源头
内容简介 1.第一部分第八课:传值引用,文件源头 2.第一部分第九课预告:数组威武,动静合一 传值引用,文件源头 这一课的标题有点怪.其实是由这一课的几个重点内容结合起来取的名,慢慢学习就知道啦. 上 ...
最新文章
- 使用arthas采集火焰图
- python哪一版好用-Python最好用的编辑器是哪款?北京老男孩教育
- 30-35岁职场规划深谈,字字戳心
- [转]如何完美应对面试
- 第二增长曲线:如何发现击穿破局点的单一要素?
- 去年微软颁发1360万美元奖励,中国提交的漏洞报告数量位列前三强
- 用python画大白圣诞快乐呦
- 华为盒子m330能生鸿蒙吗,不仅能看片 教你怎么玩转华为M330盒子
- 学习总结5.0 Linux tar打包命令
- php仿it之家源码,织梦仿IT之家带wap手机版 v5.7
- android 解谜 游戏,Android解谜游戏《100个任务》图文攻略
- echarts关系图谱初级实现
- 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
- 伪装学渣未删减部分_慎重勇者:破坏神和圣哉做了什么?第9话战帝被删减剧情补充...
- 理解virt res shr之间的关系 - linux
- Linux运维是什么?linux运维的基础知识
- win10 桌面颜色变成灰色
- 翻译—使用Python分析离散心率信号–第2部分
- 谈谈java中封装的那点事
- Android RTL布局适配
热门文章
- Asp.Net 之 枚举类型的下拉列表绑定
- PB与各种数据库连接
- 从办公桌可以看透一个人
- Vegas如何设置淡入淡出?
- Centos 7 配置 apache 网站
- log4j容器初始化探究
- 【POJ 2342】Anniversary party(入门树形dp)
- Visual Studio 2015 移动跨平台开发初体验
- [实变函数]2.2 聚点 (cluster point), 内点 (interior point), 界点 (boundary point)
- 无所不能的『十五郎』向您致敬!!!