作家
登录

编写Linux Shell脚本的最佳实践

作者: 来源: 2017-08-11 19:01:17 阅读 我要评论

定名有标准

所谓定名规范,根本包含下面这几点:

  • 文件名规范,以.sh结尾,便利辨认
  • 变量名字要有含义,不要拼错
  • 同必定名风格,写shell一般用小写字母加下划线

编码要同一

在写脚本的时刻尽量应用UTF-8编码,可以或许支撑中文等一些奇奇滚滚的字符。不过固然能写中文,然则在写注释以及打log的时刻照样尽量英文,毕竟很多机械照样没有直接支撑中文的,打出来可能会有乱码。

权限记得加

这一点固然很小,然则我小我却经常忘记,不加履行权限会导致无法直接履行,有点憎恶。。。

日记和回显

日记的重要性不必多说,可以或许便利我们回头纠错,在大年夜型的项目里是异常重要的。

如不雅这个脚本是供用户直接在敕令行应用的,那么我们最好还要可以或许在履行时及时回显履行过程,便应用户掌控。

有时刻为了进步用户体验,我们会在回显中添加一些特效,比如色彩啊,闪烁啊之类的,具体可以参考ANSI/VT100 Control sequences这篇文┞仿的介绍。

暗码要移除

不要把暗码硬编码裹足本里,不要把暗码硬编码裹足本里,不要把暗码硬编码裹足本里。

太长要分行

借居引用值

在调用某些法度榜样的时刻,参数可能会很长,这时刻为了包管较好的浏览体验,我们可以用反斜杠来分行:

  1. ./configure –prefix=/usr –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf 

留意在反斜杠前有个空格。

编码细节规范

代码有效力

在应用敕令的时刻要懂得敕令的具体做法,尤其当数据处理量大年夜的时刻,要时刻推敲该敕令是否会影响效力。

比如下面的两个sed敕令:

  1. ./configure –prefix=/usr –sbin-path=/usr/sbin/nginx –conf-path=/etc/nginx/nginx.conf 

他们的感化一样,都是获取文件的第一行。然则第一条敕令会攫取全部文件,而第二条敕令只攫取第一行。当文件很大年夜的时刻,仅仅是如许一条敕令不一样就会造成巨大年夜的效力差别。

几乎所有的大年夜佬都推荐在应用”$”来获取变量的时刻最好加上双引号。

不加上双引号在很多情况下都邑造成很大年夜的麻烦,为什么呢?举一个例子:

  1. #!/bin/sh   #已知当前文件夹有一个a.sh的文件   var="*.sh"    
  2. echo $var    
  3. echo "$var" 

他的运行结不雅如下:

市情上对于shell的静态检查对象还真不多,找来找去就找到一个叫shellcheck的对象,开源在github上,有8K多的star,看上去照样十分靠谱的。我们可以去他的主页懂得具体的安装和应用信息。

  1. a.sh*.sh 

为啥会如许呢?其实可以解释为他履行了下面的敕令:

  1. echo *.shecho "*.sh" 

在很多情况下,在将变量作为参数的时刻,必定要留意膳绫擎这一点,细心领会个中的差别。膳绫擎只是一个异常小的例子,实际应用的时刻因为这个细节导致的问题实袈溱是太多了。。。

这个对象的对不合平台的支撑力度都很大年夜,他至少支撑了

巧用main函数

我们知道,像java,C如许的编译型说话都邑有一个函数人口,这种构造使得代码可读性很强,我们知道哪些直接履行,那些是函数。然则脚本不一样,脚本属于解释性说话,大年夜第一行直接履行到最后一行,如不雅在这傍边敕令与函数糅杂在一路,那就异常难读了。

用python的同伙都知道,一个合乎标准的python脚本大年夜体上至少是如许的:

  1. #!/usr/bin/env python   def func1():       pass   def func2():       pass   if __name__=='__main__':       func1()       func2() 

他用一个很奇妙的办法实现了我们习惯的main函数,使得代码可读性更强。

在shell中,我们也有类似的小技能:

  1. #!/usr/bin/env bash func1(){ #do sth } func2(){ #do sth } main(){ func1 func2 } main "$@" 

我们可以采取这种写法,同样实现类似的main函数,使得脚本的构造化程度更好。

推敲感化域

shell中默认的变量感化域都是全局的,比如下面的脚本:

  1. #!/usr/bin/env bash var=1func(){ var=2 } func echo $var 

  2.   推荐阅读

      如何监听页面 DOM 变动并高效响应

    比来在做 chrome 插件开辟,既然是插件那就不免纰谬现有页面做一些控制,比如事宜监听、调剂构造、对 DOM 元素的增删改查等等。个中有一个需求比较有意思,便整顿一基层便把涉及到的常识>>>详细阅读


    本文标题:编写Linux Shell脚本的最佳实践

    地址:http://www.17bianji.com/lsqh/36661.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)