定名有标准
所谓定名规范,根本包含下面这几点:
- 文件名规范,以.sh结尾,便利辨认
- 变量名字要有含义,不要拼错
- 同必定名风格,写shell一般用小写字母加下划线
编码要同一
在写脚本的时刻尽量应用UTF-8编码,可以或许支撑中文等一些奇奇滚滚的字符。不过固然能写中文,然则在写注释以及打log的时刻照样尽量英文,毕竟很多机械照样没有直接支撑中文的,打出来可能会有乱码。
权限记得加
这一点固然很小,然则我小我却经常忘记,不加履行权限会导致无法直接履行,有点憎恶。。。
日记和回显
日记的重要性不必多说,可以或许便利我们回头纠错,在大年夜型的项目里是异常重要的。
如不雅这个脚本是供用户直接在敕令行应用的,那么我们最好还要可以或许在履行时及时回显履行过程,便应用户掌控。
有时刻为了进步用户体验,我们会在回显中添加一些特效,比如色彩啊,闪烁啊之类的,具体可以参考ANSI/VT100 Control sequences这篇文┞仿的介绍。
暗码要移除
不要把暗码硬编码裹足本里,不要把暗码硬编码裹足本里,不要把暗码硬编码裹足本里。
太长要分行
借居引用值
在调用某些法度榜样的时刻,参数可能会很长,这时刻为了包管较好的浏览体验,我们可以用反斜杠来分行:
- ./configure –prefix=/usr –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf
留意在反斜杠前有个空格。
编码细节规范
代码有效力
在应用敕令的时刻要懂得敕令的具体做法,尤其当数据处理量大年夜的时刻,要时刻推敲该敕令是否会影响效力。
比如下面的两个sed敕令:
- ./configure –prefix=/usr –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf
他们的感化一样,都是获取文件的第一行。然则第一条敕令会攫取全部文件,而第二条敕令只攫取第一行。当文件很大年夜的时刻,仅仅是如许一条敕令不一样就会造成巨大年夜的效力差别。
几乎所有的大年夜佬都推荐在应用”$”来获取变量的时刻最好加上双引号。
不加上双引号在很多情况下都邑造成很大年夜的麻烦,为什么呢?举一个例子:
- #!/bin/sh #已知当前文件夹有一个a.sh的文件 var="*.sh"
- echo $var
- echo "$var"
他的运行结不雅如下:
市情上对于shell的静态检查对象还真不多,找来找去就找到一个叫shellcheck的对象,开源在github上,有8K多的star,看上去照样十分靠谱的。我们可以去他的主页懂得具体的安装和应用信息。
- a.sh*.sh
为啥会如许呢?其实可以解释为他履行了下面的敕令:
- echo *.shecho "*.sh"
在很多情况下,在将变量作为参数的时刻,必定要留意膳绫擎这一点,细心领会个中的差别。膳绫擎只是一个异常小的例子,实际应用的时刻因为这个细节导致的问题实袈溱是太多了。。。
这个对象的对不合平台的支撑力度都很大年夜,他至少支撑了
巧用main函数
我们知道,像java,C如许的编译型说话都邑有一个函数人口,这种构造使得代码可读性很强,我们知道哪些直接履行,那些是函数。然则脚本不一样,脚本属于解释性说话,大年夜第一行直接履行到最后一行,如不雅在这傍边敕令与函数糅杂在一路,那就异常难读了。
用python的同伙都知道,一个合乎标准的python脚本大年夜体上至少是如许的:
- #!/usr/bin/env python def func1(): pass def func2(): pass if __name__=='__main__': func1() func2()
他用一个很奇妙的办法实现了我们习惯的main函数,使得代码可读性更强。
在shell中,我们也有类似的小技能:
- #!/usr/bin/env bash func1(){ #do sth } func2(){ #do sth } main(){ func1 func2 } main "$@"
我们可以采取这种写法,同样实现类似的main函数,使得脚本的构造化程度更好。
推敲感化域
shell中默认的变量感化域都是全局的,比如下面的脚本:
- #!/usr/bin/env bash var=1func(){ var=2 } func echo $var
推荐阅读
比来在做 chrome 插件开辟,既然是插件那就不免纰谬现有页面做一些控制,比如事宜监听、调剂构造、对 DOM 元素的增删改查等等。个中有一个需求比较有意思,便整顿一基层便把涉及到的常识>>>详细阅读
本文标题:编写Linux Shell脚本的最佳实践
地址:http://www.17bianji.com/lsqh/36661.html
1/2 1