Linux的shell小脚本的用途

熟悉Linux的朋友们,对linux的命令,肯定都不陌生,大部分时候我们都可以使用系统自带的命令来轻松完成我们的工作。如果我们再能简单掌握下这些shell的制作,在某些场景下对我们的工作是非常有利的,当然如果你shell功底深,那么你完全可以制作出很多有意思的东西。
本篇散仙只是简单介绍下怎么入门,以及这些封装的shell脚本在一些集群作业带来的便利,
下面截个tomcat的bin下面的目录,来熟悉一下我们最常用的tomcat的一些脚本组成



上图中,我们会发现大部分都是cat和sh结尾的,而这个sh结尾的其实就是linux下自定义的shell的命令用来完成特定的功能,而以cat结尾的这个就是Windows上的批处理命令,类似win上的shell,有了这两种脚本就可以兼容Windows和linux的平台应用了。

我们先制作一个经典的Hellow World的shell脚本,步骤非常简单,打开你的记事本(推荐使用Notepad++),输入以下内容即可。


然后保存成x.sh即可,然后我们就可以上传到linux上,并赋予可执行权限后,就可以执行sh   x.sh看输出效果了,截图如下:


下面在给一个使用shell循环打印10-20间的例子,内容如下

依旧上传linux,添加可执行权限后,进行执行打印效果如下:


另外一点,需要特别注意的是,由于编辑脚本是直接在windows下写的,并没有使用特定的编辑器或者其他工具,所以很有可能出现一些莫名其妙的异常,这些错误是我们眼睛看不到的,遇到这个情况,例如如下异常或者提示语法错误
unexpected end of file

我们可以在linux上使用cat命令,进行清洗数据,
使用工具 cat 和 tr, 方法如下:

bash$ cat -v startqftest.sh |tr -d "^M" > qf.sh

其中 startqftest.sh 是存在问题的脚本, qf.sh是新生成的文件。

sed 's/^M//' test.sh > back.sh^M是Ctrl+v Ctrl+m

解释一下, cat 可以查看许多不可见这符,
cat -t 显示TAB 为 ^I
cat -e 显示行尾为 $,
cat -v 显示不可见字符,用^M表示,所以^M就表示不认识的不可见字符。M 表示Mark,标记的意思。
tr - translate or delete characters
另外,cat 还可以用来调Makefile,
cat -t Makefile 查看命令中有非Tab开头的,
grep '^ ' Makefile 查找命令行中以空格开头的行
cat -e Makefile 查看行尾是否正确,防止\后面多一个空格,
grep '\\[ ]$' Makefile 找出以上那样的行


最后,散仙还讲说一下,会简单的shell编程带来的好处,当我们使用hadoop进行集群提交作业时,你可能使用的是C++,或者PHP,或者Python语言等非Java编写的MR程序,这种方式就是Hadoop Streaming的方式了,当我们向集群提交作业时,可能会执行一段很长的shell命令来提交作业,并且在每个集群上都要分发一份命令,而这时候我们封装一个shell脚本,就很方便了,因为你不可能去手动执行每个节点上的命令,假设集群规模很大,那将是多么耗时的一件事情,而且还容易出错,所以,封装个脚本可以重复利用,也很简洁,如下所示的一段提交命令
#!/bin/sh
 bin/hadoop jar 
 hadoop-streaming-1.2.0.jar \
 -files map.py  \
 -files r.py  \
 -mapper 'map.py' \
 -reducer 'r.py' \
 -input /note \
 -output /noteout


封装一个shell脚本里面,可以重复使用,执行起来也非常方便,当然使用shell编程的可以完成很多事情,散仙上面所举的例子只是它的冰山一角,有兴趣的朋友可以再去深入的研究一下。




猜你喜欢

转载自qindongliang.iteye.com/blog/1969636