6条shell小技巧,让脚本显得不再业余
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小技巧,让脚本显得不再业余相关推荐
- uwsgi怎么通过浏览器访问某个脚本_4个Shell小技巧帮你提高机器学习效率:写好脚本,事半功倍...
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在机器学习的实践过程中,用好Shell能帮你很多节省时间. 最近,有位来自ETHZ的学生分享了一些Shell小技巧.对程序员来说,这些技巧更 ...
- 4个Shell小技巧,帮你提高机器学习生产效率
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在机器学习的实践过程中,用好Shell能帮你很多节省时间. 最近,有位来自ETHZ的学生分享了一些Shell小技巧.对程序员来说,这些技巧 ...
- 程序员求职高峰期,这12条工作小技巧必看
过完春节,该拿的奖金都拿了,又到了一年一度的离职高峰期,新老手程序员纷纷走上了求职之路. 今天给所有程序员提12条工作小技巧,让你在新工作上越做越顺. 1.写文档的能力非常重要 像Spring,hib ...
- php exec执行多条命令,小技巧:在PHP中调用多条shell指令
原标题:小技巧:在PHP中调用多条shell指令 有时候,在持续集成的过程中,需要通过网页在目标服务器上执行shell指令,今天就列举一个实例进行讲解. 比如,我们需要能通过网页将SVN update ...
- SEO优化几条实用小技巧
SEO优化小技巧 想着并不是所有的技术都是SEO技术背景,这个项目实例的步骤看起来实操性低了一些,所以也分享几个刚接触SEO的朋友,也用得上的小技巧: 1.无论做什么类型的SEO,关键词的选择是先决条 ...
- 计算机ppt技巧,5个PPT设计小技巧,让PPT不再呆板
相信很多人在制作PPT的时候,会经常为排版而发愁,总是做不出好看的板式,或者做出来的PPT很呆板. (电脑入门到精通网 www.58116.cn) 那么,接下来为你介绍5个PPT设计小技巧,让你的PP ...
- Shell小技巧(一百零五)脚本中的空格小结
1.通过空格可以实现同一行内给多个变量赋值 例如: var1=1 var2=2 var3=3 2.变量中含有空格时,可能输出结果大相径庭 例如: x="a b c d ...
- 【一起去大厂系列】针对left join以及limit的两条优化小技巧
记两则亲身经历的sql优化技巧: 一.主表数据不到100万,以下查询结果集约200左右,第一条sql执行效率为40ms,第二条为200ms,使用上面方法,其效率明显优于left join: sql1: ...
- Shell小技巧(一百一十贰)特殊字符“\”-转义小结
在各种编程语言中,一般都存在使用特殊字符组合来表达特殊的含义.其中大部分都适用"\"作为转换字符含义的操作符. Shell中也使用"\",我们称其为转义. 在e ...
最新文章
- SLAM-ch2-使用kdevelop创建helloWorld程序
- js html 追加span内容,使用JavaScript显示SPAN的内容
- 使用Log Explorer恢复数据
- java 热补丁_Android热补丁之AndFix原理解析
- python连接mysql_Python爬虫进阶教程(八):MySQL 数据库连接
- 多环境切换---SpringBoot
- 属于微型计算机主要性能指示,2014年兰大入学测试题--计算机基础
- 20145231熊梓宏 《网络对抗》 实验四 恶意代码分析
- Linux查看登录日志
- Docker 镜像优化与最佳实践
- java 事件处理机制
- javascript中继承的几种方式
- Python爬虫进阶教程:抖音APP无水印视频批量下载
- 宽松委托转换(Relaxed delegate conversion)
- 关于IE中出现的内存不能为written问题的解决方法
- matlab help函数用法,帮你快速入门MATLAB(基本知识篇)
- 2023年四川农业大学农村发展专硕经验贴
- 音视频技术之《移动直播秒开优化经验》
- Pyecharts一文速学-绘制树形图实例+Python代码
- SQL Server2008安装:应用程序中发生了无法处理的异常
热门文章
- 深入理解CSS权重(优先级)
- Bootstrap 3 移除输入框聚焦线 How to remove border (outline) around text/input boxes?
- 常用浏览器修改User-Agent的方法
- Linux中read命令的用法
- 统计学习方法-李航(4)
- Python_百度图片以及百度贴吧图片抓取
- Python __getattr__和__setattr__方法介绍
- Ethercat解析(十一)之分布时钟
- Linux zip命令:压缩文件或目录
- Linux mv命令:移动文件或改名