• 6条shell小技巧,让脚本显得不再业余【转】


    如何能让自己的shell显得不那么业余?下面6点实践一定有用。

    画外音:本篇文章源自Google的一篇实践,抽取了部分1分钟能读完的内容,加入了一些分析。

     

    一、以下面的语句开场

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    set -o nounset

    在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。

    画外音:有些变量名的手误,会让人崩溃的调试半天,通过这个方式,这类手误秒发现。

     

    set -o errexit

    在默认情况下,遇到执行出错,会跳过并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。

    画外音:有些Linux命令,例如rm的-f参数可以强制忽略错误,此时脚本便无法捕捉到errexit,这样的参数在脚本里是不推荐使用的。

     

    这两个选项,都符合fail fast设计理念。

     

    二、封装函数有必要

    别光顾着一溜往下写,封装可以提高复用。

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    如上例:

    log()

    简单封装,能够省去很多

    [$(date +%Y/%m/%d %H:%M:%S)]

    的重复代码。

    画外音:这个log()有点意思,学到了吗?

     

    同时,封装还能提高代码的可读性。

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    如上例:

    ExtractBashComments

    egrep "^#"

    的可读性就高很多。

    画外音:有些抬杠的朋友会说,不认识英文。

     

    三、使用readonly和local修饰变量

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    readonly

    顾名思义,只读。

     

    local

    函数内变量。

     

    别图省事,提高安全性的同时,能避免很多让人崩溃的莫名其妙的错误。脚本写得专不专业,往往不是什么高深的点,从基本功绝逼能体现。

    画外音:据说,一个C++程序员到什么水平,从ta代码里const的使用频度,能够看出来。

     

    四、使用$()代替`(反单引号)

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    为什么?看了上面的例子你就懂了:

    (1)$()能够支持内嵌;

    (2)$()不用转义;

    (3)有些字体,`(反单引号)和’(单引号)很像,容易把人搞晕;

     

    五、使用[[]]代替[]

    用单中括号:

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    用双中括号:

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

     

    看出差别了么?[[]]更符合人性编码:

    (1)避免转义问题;

    (2)有不少新功能;

     

    新功能包含但不限于:

    || :逻辑or

    && :逻辑and

    < :字符串比较(不需要转义)

    == :通配符(globbing)字符串比较

    =~ :正则表达式(regular expression, RegEx)字符串比较

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    需要注意的是,从bash3.2开始,通配符和正则表达式都不能用引号包裹了(所以,上面的例子,加了引号就是字面比较)。

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    所以如果表达式里有空格,必须存储到一个变量里,再进行通配符与正则的比较。

     

    六、echo不是唯一的调试方法

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    可以用-n对脚本进行语法检查。

     

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    可以用-v跟踪脚本里的每个命令的执行。

     

    6条shell小技巧,让脚本显得不再业余(1分钟系列)

    可以用-x跟踪脚本里的每个命令的执行,并附加扩充信息。

     

    当然,也可以在脚本里,添加

    set -o verbose

    set -o xtrace

    来永久指定输出调试信息。

    转自

    6条shell小技巧,让脚本显得不再业余(1分钟系列) https://www.toutiao.com/i6731506941442392590/

  • 相关阅读:
    [SPOJ-TTM]To the moon
    [BZOJ1901]Zju2112 Dynamic Rankings
    [算法模板]ST表
    [算法模板]树状数组
    [SPOJ-COT]Count on a tree
    [算法模板]倍增求LCA
    【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
    【uva 1152】4 Values Whose Sum is Zero(算法效率--中途相遇法+Hash或STL库)
    【uva 658】It's not a Bug, it's a Feature!(图论--Dijkstra或spfa算法+二进制表示+类“隐式图搜索”)
    【uva 10048】Audiophobia(图论--Floyd算法)
  • 原文地址:https://www.cnblogs.com/paul8339/p/11693259.html
Copyright © 2020-2023  润新知