bash更高级一点的用途是在什么方面啊? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gouera
V2EX    Bash

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

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

    size变量哪里是0K 不是OK...
    felix021
        18
    felix021  
       2014-01-13 21:14:44 +08:00
    @gouera
    1. ls的-h参数一定是以KB为单位么?
    2. tail 的 -c 参数是以KB为单位么?
    3. 如果这个脚本执行的时候不是在脚本所在位置执行会出现什么问题?
    4. warning.log这个中间文件是必要的吗?
    gouera
        19
    gouera  
    OP
       2014-01-13 21:30:33 +08:00
    @felix021 第一个考虑不周..
    第二个 man页面说的 --bytes=K 没看懂...
    第三个基本上不会动的了吧。 自用的。。
    中间件貌似无所谓吧。。反正后面有个rm -rf 。。
    halfbloodrock
        20
    halfbloodrock  
       2014-01-13 22:56:46 +08:00
    RVM的几个shell脚本是经典的学习例子。
    jybox
        21
    jybox  
       2014-01-13 23:29:13 +08:00
    我感觉bash最适合写安装脚本,毕竟是所有发行版都支持的
    loryyang
        22
    loryyang  
       2014-01-14 14:19:55 +08:00
    做一些简单的自动化操作和文本分析。但是说实话,现在的脚本语言,比如python、perl什么的牛逼多了,bash只是更加贴近操作系统,这个算是一个优势吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1338 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:02 PVG 01:02 LAX 09:02 JFK 12:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86