Linux的shell小脚本的用途

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

[img]http://dl2.iteye.com/upload/attachment/0090/8221/191835ba-2363-35be-96f7-718e2cac330b.jpg[/img]
[b][size=x-large][color=olive]上图中,我们会发现大部分都是cat和sh结尾的,而这个sh结尾的其实就是linux下自定义的shell的命令用来完成特定的功能,而以cat结尾的这个就是Windows上的批处理命令,类似win上的shell,有了这两种脚本就可以兼容Windows和linux的平台应用了。[/color][/size][/b]

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

[img]http://dl2.iteye.com/upload/attachment/0090/8226/dadc8853-7de1-38e5-855f-d4fd7d93b367.jpg[/img]
[b][color=olive][size=x-large]然后保存成x.sh即可,然后我们就可以上传到linux上,并赋予可执行权限后,就可以执行sh x.sh看输出效果了,截图如下:[/size][/color][/b]

[img]http://dl2.iteye.com/upload/attachment/0090/8228/fa5753bb-29bd-34a5-90bb-53f8e5d6f166.jpg[/img]
[b][color=olive][size=x-large]下面在给一个使用shell循环打印10-20间的例子,内容如下[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0090/8246/19dc4de0-0440-3367-8109-d068370f313e.jpg[/img]
[b][color=green][size=x-large]依旧上传linux,添加可执行权限后,进行执行打印效果如下:[/size][/color][/b]
[img]http://dl2.iteye.com/upload/attachment/0090/8248/7244c0de-f7fb-3c96-90b1-38179e61abc2.jpg[/img]

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

[b][color=olive][size=x-large]我们可以在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 找出以上那样的行
[/size][/color][/b]

[b][color=green][size=x-large]最后,散仙还讲说一下,会简单的shell编程带来的好处,当我们使用hadoop进行集群提交作业时,你可能使用的是C++,或者PHP,或者Python语言等非Java编写的MR程序,这种方式就是Hadoop Streaming的方式了,当我们向集群提交作业时,可能会执行一段很长的shell命令来提交作业,并且在每个集群上都要分发一份命令,而这时候我们封装一个shell脚本,就很方便了,因为你不可能去手动执行每个节点上的命令,假设集群规模很大,那将是多么耗时的一件事情,而且还容易出错,所以,封装个脚本可以重复利用,也很简洁,如下所示的一段提交命令[/size][/color][/b]
#!/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


[b][color=olive][size=x-large]封装一个shell脚本里面,可以重复使用,执行起来也非常方便,当然使用shell编程的可以完成很多事情,散仙上面所举的例子只是它的冰山一角,有兴趣的朋友可以再去深入的研究一下。
[/size][/color][/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值