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

原创作者: 58沈剑 来自公众号:架构师之路

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

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

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

一、以下面的语句开场

set -o nounset

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

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

set -o errexit

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

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

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

二、封装函数有必要

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

如上例:

log()

简单封装,能够省去很多

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

的重复代码。

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

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

如上例:

ExtractBashComments

egrep "^#"

的可读性就高很多。

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

三、使用readonly和local修饰变量

readonly

顾名思义,只读。

local

函数内变量。

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

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

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

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

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

(2)$()不用转义;

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

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

用单中括号:

用双中括号:

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

(1)避免转义问题;

(2)有不少新功能;

新功能包含但不限于:

|| :逻辑or

&& :逻辑and

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

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

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

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

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

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

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

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

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

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

set -o verbose

set -o xtrace

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

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

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

架构师之路-分享技术思路

相关推荐:

《写一个cache,要掌握哪些技术点》

调研,写脚本时:

(1)有因为手误,把自己逼疯过么?

(2)有因为转义,把自己搞晕过么?

(3)是用echo调试么?

6条shell小技巧,让脚本显得不再业余相关推荐

  1. uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在机器学习的实践过程中,用好Shell能帮你很多节省时间. 最近,有位来自ETHZ的学生分享了一些Shell小技巧.对程序员来说,这些技巧更 ...

  2. 4个Shell小技巧,帮你提高机器学习生产效率

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 在机器学习的实践过程中,用好Shell能帮你很多节省时间. 最近,有位来自ETHZ的学生分享了一些Shell小技巧.对程序员来说,这些技巧 ...

  3. 程序员求职高峰期,这12条工作小技巧必看

    过完春节,该拿的奖金都拿了,又到了一年一度的离职高峰期,新老手程序员纷纷走上了求职之路. 今天给所有程序员提12条工作小技巧,让你在新工作上越做越顺. 1.写文档的能力非常重要 像Spring,hib ...

  4. php exec执行多条命令,小技巧:在PHP中调用多条shell指令

    原标题:小技巧:在PHP中调用多条shell指令 有时候,在持续集成的过程中,需要通过网页在目标服务器上执行shell指令,今天就列举一个实例进行讲解. 比如,我们需要能通过网页将SVN update ...

  5. SEO优化几条实用小技巧

    SEO优化小技巧 想着并不是所有的技术都是SEO技术背景,这个项目实例的步骤看起来实操性低了一些,所以也分享几个刚接触SEO的朋友,也用得上的小技巧: 1.无论做什么类型的SEO,关键词的选择是先决条 ...

  6. 计算机ppt技巧,5个PPT设计小技巧,让PPT不再呆板

    相信很多人在制作PPT的时候,会经常为排版而发愁,总是做不出好看的板式,或者做出来的PPT很呆板. (电脑入门到精通网 www.58116.cn) 那么,接下来为你介绍5个PPT设计小技巧,让你的PP ...

  7. Shell小技巧(一百零五)脚本中的空格小结

    1.通过空格可以实现同一行内给多个变量赋值 例如: var1=1   var2=2   var3=3 2.变量中含有空格时,可能输出结果大相径庭 例如: x="a b  c   d     ...

  8. 【一起去大厂系列】针对left join以及limit的两条优化小技巧

    记两则亲身经历的sql优化技巧: 一.主表数据不到100万,以下查询结果集约200左右,第一条sql执行效率为40ms,第二条为200ms,使用上面方法,其效率明显优于left join: sql1: ...

  9. Shell小技巧(一百一十贰)特殊字符“\”-转义小结

    在各种编程语言中,一般都存在使用特殊字符组合来表达特殊的含义.其中大部分都适用"\"作为转换字符含义的操作符. Shell中也使用"\",我们称其为转义. 在e ...

最新文章

  1. SLAM-ch2-使用kdevelop创建helloWorld程序
  2. js html 追加span内容,使用JavaScript显示SPAN的内容
  3. 使用Log Explorer恢复数据
  4. java 热补丁_Android热补丁之AndFix原理解析
  5. python连接mysql_Python爬虫进阶教程(八):MySQL 数据库连接
  6. 多环境切换---SpringBoot
  7. 属于微型计算机主要性能指示,2014年兰大入学测试题--计算机基础
  8. 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析
  9. Linux查看登录日志
  10. Docker 镜像优化与最佳实践
  11. java 事件处理机制
  12. javascript中继承的几种方式
  13. Python爬虫进阶教程:抖音APP无水印视频批量下载
  14. 宽松委托转换(Relaxed delegate conversion)
  15. 关于IE中出现的内存不能为written问题的解决方法
  16. matlab help函数用法,帮你快速入门MATLAB(基本知识篇)
  17. 2023年四川农业大学农村发展专硕经验贴
  18. 音视频技术之《移动直播秒开优化经验》
  19. Pyecharts一文速学-绘制树形图实例+Python代码
  20. SQL Server2008安装:应用程序中发生了无法处理的异常

热门文章

  1. 深入理解CSS权重(优先级)
  2. Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
  3. 常用浏览器修改User-Agent的方法
  4. Linux中read命令的用法
  5. 统计学习方法-李航(4)
  6. Python_百度图片以及百度贴吧图片抓取
  7. Python __getattr__和__setattr__方法介绍
  8. Ethercat解析(十一)之分布时钟
  9. Linux zip命令:压缩文件或目录
  10. Linux mv命令:移动文件或改名