V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gouera
V2EX  ›  Bash

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

  •  
  •   gouera · 2014-01-13 17:23:16 +08:00 · 4259 次点击
    这是一个创建于 3975 天前的主题,其中的信息可能已经有所发展或是发生改变。
    平时除了用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  
       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   ·   实用小工具   ·   2867 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:31 · PVG 20:31 · LAX 04:31 · JFK 07:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.