?

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

长文《memcache核心技术点》阅读较低,重启1分钟系列,快消时代,碎片时间可能大家更喜欢短文,更喜欢技术实践类文章吧。

画外音:说实话,技术思路类文章(WHY, HOW),比技术实践类(WHAT)更难写。

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

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

一、以下面的语句开场

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

(1) set -o nounset

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

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

(2) 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分钟系列)

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

$()能够支持内嵌;

$()不用转义;

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

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

用单中括号:

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

用双中括号:

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

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

避免转义问题;

有不少新功能;

新功能包含但不限于:

|| :逻辑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 

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

画外音:多在自己在机器上试一下就明白了。

希望这1分钟大家有收获。

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

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

戳这里,看该作者更多好文

【编辑推荐】

100行Python代码,轻松搞定神经网络

大量GitHub用户遭黑客勒索:不交比特币就公开私有代码

PyTorch最佳实践,怎样才能写出一手风格优美的代码

55岁加入Google做程序员,69岁还在编程,这才是代码人生

代码详解:Python虚拟环境的原理及使用

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
  • 超级大汇总!200多个最好的机器学习、

      我把这篇文章分为了四个部分:机器学习,自然语言处理,python和数学。在每个部分中我都列举了一些主题,但是因......

    09-25????来源:洛阳新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。