> 文章列表 > 1682_尝试写一个shell(做个努力的小菜鸟)

1682_尝试写一个shell(做个努力的小菜鸟)

1682_尝试写一个shell(做个努力的小菜鸟)

      全部学习汇总: GreyZhang/bash_basic: my learning note about bash shell. (github.com)

       跋:看了一下,这个可能是我大约十年前的学习笔记了,脑海中都没有多少那时候的记忆痕迹了。然而,当初的一些时间消磨的确是给今天的我带来了很多充实。

    自从选择了Linux作为自己的个人电脑平台后,我似乎还是一直热衷于GUI。不可否认,我很喜欢漂亮的界面,如果手头的电脑是mac,我想我转投苹果阵营是板上钉钉的结果。但是现实的情况很残酷,我不是高富帅,玩不起水果。我甚至连买个windows软件的钱都得考虑一下,考虑的结果还是放弃购买使用Linux。我也不否认,Linux是一个非常优秀的操作系统门类。然而,我最不能够否认的是在Linux的世界,我是一只小菜鸟。

工作之后,工作性质的原因我学过一点点批处理,也自学了matlab的M语言、perl语言等。当然,最主要的目的就是要简化我手头反复操作的工作,让工作多少走向自动化。说到了批处理,说到了调用的自动化等等东西,我想接触过Linux的人全都不会记不起这个系统,也不会想不起shell。

生活中我喜欢随手拍照,以前用手机,现在也走风高大上地买了相机。为了传到各个论坛,有时候各种处理各种压缩,各种改名字。前段时间网络上搜来了一段代码,经过不知道多少次调用把照片压缩到我想要的大小。工作中养成的直觉在催促我改进一下这个环节。

“不怕执行效率低,怕的是需要人一次次地不断重复工作”。这是我对待当前自己工作、生活态势的态度。好吧,那就尝试改进。下载了一本500页的shell教程,看了50页后决定放弃,更好的方式是凭借自己的直觉加网络搜索的方式学习。

先看一下自己网上找到的代码:

#!/bin/bash

echo "resize image who is bigger than 1000k";

for i in `find . -size +1000k`;

do

convert $i -resize 90% $i;

echo "resize image $i to 90%";

Done

学了perl语言,第一句我很熟悉。这句看着像注释的非注释是用于知名shell解析器。接下来输出一个压缩提示。再往下的for循环则是工作的核心,找出当前目录下大于5000k的照片压缩到5000k。i是找出的文件,加个$作为变量引用。至于压缩,当前得提前安装imagemagick。这样,如果照片都是5M以上,一轮压缩显然完不成工作。好了,进一步自动化修正需求来啦!

修改代码如下:

#!/bin/bash

echo "resize image who is bigger than 5000k";

while(find . -size +1000k)

do

  for i in `find . -size +1000k`;

  do

  convert $i -resize 90% $i;

  echo "resize image $i to 90%";

  done

done

While循环的意思还是很明显的,为了习惯我自己的阅读习惯,我对代码的缩进排版也做了一点点调整。当然,我猜测着find指令会返回一个可以用作布尔值判断的返回值。尝试运行了一下,一次性压缩完毕的结果出现了,但是最终shell不能够退出。没办法强制退出。

 

但是看看文件的详细信息,似乎一切已经完成,期待改进。