bash更高级一点的用途是在什么方面啊?

2014-01-13 17:23:16 +08:00
 gouera
平时除了用bash写几个mysql备份和rsync同步的脚本用来给crond 定时任务之外,找不到其他用处了。
awk sed 之类的根本就用不上了。。。
4269 次点击
所在节点   Bash
22 条回复
felix021
2014-01-13 17:28:12 +08:00
sed我很少用,不过find、awk、sort、uniq、grep、tail、head之类,在生产上倒是经常用到,简单跑点统计、查看日志什么的,都很有用。
hzlzh
2014-01-13 17:36:11 +08:00
awk +1
gouera
2014-01-13 18:11:55 +08:00
@felix021 查看日志不直接在命令行看就行了吗,干嘛还写个脚本...
arcas
2014-01-13 18:13:23 +08:00
@gouera '懒'
gouera
2014-01-13 18:16:20 +08:00
@arcas 懂了。。。
felix021
2014-01-13 18:19:30 +08:00
@gouera 以前在B公司实习的时候,他们做日志监控就是用tail+grep,把最新的Warning log拖出来发到邮件里
gouera
2014-01-13 18:26:09 +08:00
@felix021 那这个要求这样写OK不
tail -1000 /var/log/messages | grep Warning >warning.log
mail -s warning aa@bb.com <warning.log
rm -rf warning.log
nervouna
2014-01-13 18:35:26 +08:00
写小工具,作为几道工序之间的中间件还是很赞的
分享一个我同事写的 bash 脚本,用来自动打包 iOS app 然后上传到指定服务器:
https://gist.github.com/linyize/8034386
gouera
2014-01-13 18:39:08 +08:00
@nervouna 额,这么长的没写过,自己写过最长的估计也就50行左右吧。 差不多知道用在哪里了。。。
plprapper
2014-01-13 18:39:15 +08:00
@gouera 额你这样显然会出现重复的报警 或者遗漏的报警嘛
felix021
2014-01-13 18:42:36 +08:00
@gouera 不OK,还要另外记录上次扫描位置,而不是简单的-n 1000
gouera
2014-01-13 18:45:31 +08:00
@plprapper 重复的不要就再加上uniq么。。 遗漏的应该不会吧。 报警不都是warning嘛
nervouna
2014-01-13 18:47:48 +08:00
@gouera 我也没写过这么长的,50 行对我来说已经很长了……习惯了其它编程语言,去写 Bash 会觉得很蛋疼,各种加不加空格的规则总是忘。主要还是不经常写,估计经常写的人会记得熟一些吧。
gouera
2014-01-13 19:34:51 +08:00
@felix021 怎样记录上次扫描的位置啊? 我能想到的大概是行号?
felix021
2014-01-13 20:02:59 +08:00
@gouera 记录上次文件的大小就行了。tail有个-c参数。
c0878
2014-01-13 20:07:25 +08:00
拿运维工作举例 拿一份access.log过来 用脚本获取某个时段访问最多的ip按次数排列,获取响应时间超过3s的url之类的
也可以弄出自动开通ftp账户,自动配置apache/nginx站点之类的功能 用途很多的
gouera
2014-01-13 20:47:59 +08:00
@felix021 这个怎样。。
#!/bin/bash
size="0K"
[ -e size.txt ] || touch size.txt
[ ! -z size.txt ] && size=`cat size.txt`
tail -c "+${size}" /var/log/messages | grep Warning | uniq > warning.log
mail -s warninglog aa@bb.com <warning.log
#rm -rf warning.log
ls -sh /var/log/messages | awk '{print $1}' >size.txt

size变量哪里是0K 不是OK...
felix021
2014-01-13 21:14:44 +08:00
@gouera
1. ls的-h参数一定是以KB为单位么?
2. tail 的 -c 参数是以KB为单位么?
3. 如果这个脚本执行的时候不是在脚本所在位置执行会出现什么问题?
4. warning.log这个中间文件是必要的吗?
gouera
2014-01-13 21:30:33 +08:00
@felix021 第一个考虑不周..
第二个 man页面说的 --bytes=K 没看懂...
第三个基本上不会动的了吧。 自用的。。
中间件貌似无所谓吧。。反正后面有个rm -rf 。。
halfbloodrock
2014-01-13 22:56:46 +08:00
RVM的几个shell脚本是经典的学习例子。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/96829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX