长文《memcache核心技术点》少??看点,重启1分钟系列,快节奏的时代,碎片化的时间可能更像短文和技术实践类文章。画外音:说实话,技术思考文章(WHY,HOW)比技术实践文章(WHAT)更难写。我怎样才能让我的shell看起来不那么业余?以下6个做法一定有用。画外音:本文来源于Google的一次实践。它提取了一些可以在1分钟内阅读的内容并添加了一些分析。1、从以下语句开始(1)set-onounset默认情况下,遇到不存在的变量时,会忽略它继续执行,但这往往不符合预期。添加这个选项可以避免邪恶效果的扩大和终止脚本的执行。画外音:变量名有些错误会让人崩溃半天调试。通过这种方法,可以秒级发现此类错误。(2)默认情况下,set-oerrexit会在遇到执行错误时跳过继续执行,但这往往达不到预期。添加这个选项可以避免恶果的扩大,终止脚本的执行。画外音:一些Linux命令,比如rm的-f参数,可以强制忽略错误。这个时候脚本是抓不到errexit的。不建议在脚本中使用此类参数。这两个选项都符合failfast设计理念。2.封装函数一定不要着急写,封装可以提高复用性。如上例:log()的简单封装可以省去很多[$(date+%Y/%m/%d\%H:%M:%S)]的重复代码。画外音:这个log()很有意思,你学会了吗?同时,封装也可以提高代码的可读性。如上例所示:ExtractBashComments比egrep"^#"更具可读性。画外音:有些吵架的朋友会说自己不懂英文。3、使用readonly和local修饰变量readonly:顾名思义,只读。local:函数内的变量。不要图省事,在提高安全性的同时,可以避免很多让人崩溃的莫名其妙的错误。剧本写得专业与否,往往不是什么高深的点,从基本功上就能充分体现出来。画外音:据说一个C++程序员的水平,从ta代码中const的使用频率就能看出。4、为什么用$()代替`(反单引号)?看完上面的例子,你就会明白:$()可以支持内联;$()不需要转义;有些字体,`(back-singlequotes)和'(singlequotationmark)很像,很容易让人混淆;5.使用[[]]而不是[]使用单方括号:使用双方括号:看到区别了吗?[[]]更符合人类编码:避免转义问题;有很多新功能;新功能包括但不限于:||:逻辑或&&:逻辑与<:字符串比较(不需要转义)==:通配符(globbing)字符串比较=~:比??较正则表达式(regex)字符串时,需要注意的是,从bash3.2开始,通配符和正则表达式不能用引号括起来(所以,在上面的例子中,加引号就是文字比较)。所以如果表达式中有空格,就必须把它存到一个变量中,然后把通配符和正则表达式进行比较。六、echo不是唯一的调试方式你可以使用-n来检查脚本的语法。您可以使用-v来跟踪脚本中每个命令的执行情况。您可以使用-x来跟踪脚本中每个命令的执行情况并附加扩展信息。当然你也可以在脚本中加入set-overboseset-oxtrace来***指定调试信息的输出。画外音:自己上机试一下就明白了。我希望这1分钟对每个人都有收获。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文
