敕令并行化
当我们须要充分推敲履行效力时,我们可能须要在履行敕令的时刻推敲并行化。shell中最简单的并行化是经由过程”&”以及”wait”敕令来做:
- func(){ #do sth } for((i=0;i<10;i++))do func & done wait
当然,这里并行的次数不克不及太多,不然机械会卡逝世。稍微精确的做法比较复杂,今后再评论辩论,如不雅图省事可以应用parallel敕令来做。
应用新写法
这里的新写法不是指有多厉害,而是指我们可能更欲望应用较新惹人的一些语法,更多是偏向代码风格的,比如
- 尽量应用func(){}来定义函数,而不是func{}
- 尽量应用[[]]来代替[]
- 尽量应用$()周详令的结不雅赋给变量,而不是反引号
- 在复杂的场景下尽量应用printf代替echo进行回显
事实上,这些新写法很多功能都比旧的写法要强大年夜,用的时刻就知道了。
其他小tip
- #method1 find . -name '*.txt' |xargs sed -i "s/233/666/g;s/235/626/g;s/333/616/g;s/233/664/g"
推敲到还有很多零碎的点,就不一一展开了,这里简单提一提。
- 路径尽量保持绝对路径,绝多路径不轻易掉足,如不雅非要用相对路径,最好用./润饰
- 优先应用bash的变量调换代替awk sed,如许加倍简短
- 简单的if尽量应用&& ||,写成单行。比如[[ x > 2]] && echo x
- 当export变量时,尽量加上子脚本的namespace,包管变量不冲突
- 会应用trap捕获旌旗灯号,并在接收到终止旌旗灯号时履行一些收尾工作
- 应用mktemp生成临时文件或文件夹
- 应用/dev/null过滤不友爱的输出信息
- 会应用敕令的返回值判毕敕令的履行情况
- 应用文件前要断定文件是否存在,不然做好异常处理
- 不要处理ls后的数据(比如ls -l | awk '{ print $8 }'),ls的结不雅异常不肯定,并且平台有关
- 攫取文件时不要应用for loop而要应用while read
静态检查对象shellcheck
概述
为了大年夜轨制上包管脚本的质量,我们最简单的设法主意大年夜概就是搞一个静态检查对象,经由过程惹人对象来弥补开辟者可能存在的常识盲点。
安装
Debian,Arch,Gentoo,EPEL,Fedora,OS X,openSUSE等等各类的平台的主流担保理对象。安装便利。具体可以参照安装文档
集成
样例
在文档的Gallery of bad code里,也供给了异常具体的“坏代码”的标准,具有异常不错的参考价值,可以在闲下来的时刻当成”Java Puzzlers“之类的书来读读照样很舒畅的。
不过,其实我认为这个项目最最精华的部分都不是膳绫擎的功能,而是他供给了一个异常异常强大年夜的wiki。在这个wiki里,我们可以找到这个对象所有断定的根据。在这里,每一个检测到的问题都可以在wiki里找到对应的问题单号,他不仅告诉我们”如许写不好”,并且告诉我们”为什么如许写不好”,”我们应当怎么写才好”,异常合适刨根问底党进一步研究。
参考材料
- 关于 shell 脚本编程的10 个最佳实践
- shell脚本编写规范
- Shellcheck Tool
- Best Practices for Writing Bash Scripts
- Good coding practices for bash
- Design patterns or best practices for shell scripts
- bashstyle(GITHUB)
- BashGuide/Practices
- Obsolete and deprecated syntax
- ANSI/VT100 Control sequences
【编辑推荐】
- 如安在Linux下编译安装OpenCV
- 最全Linux的发行版简介,一文读懂各发行版之间的接洽和差别
- 安装WMware 在Windows平台下进修Linux
- 17个案例带你3分钟搞定Linux正则表达式
- CoreOS,一款Linux容器发行版
推荐阅读
比来在做 chrome 插件开辟,既然是插件那就不免纰谬现有页面做一些控制,比如事宜监听、调剂构造、对 DOM 元素的增删改查等等。个中有一个需求比较有意思,便整顿一基层便把涉及到的常识>>>详细阅读
本文标题:编写Linux Shell脚本的最佳实践
地址:http://www.17bianji.com/lsqh/36661.html
1/2 1