这里是一句长长的引言
- Shell 编码规范
前言
与其它的编程规范一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。
为什么要有编码规范
编码规范对于程序员而言尤为重要,有以下几个原因:
- 一个软件的生命周期中,80%的花费在于维护
- 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
- 编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
- 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
编码规范原则
本文档中的准则致力于最大限度达到以下原则:
- 正确性
- 可读性
- 可维护性
- 可调试性
- 一致性
- 美观
尽管本文档涵盖了许多基础知识,但应注意的是,没有编码规范可以为我们回答所有问题,开发人员始终需要再编写完代码后,对上述原则做出正确的判断。
代码规范等级定义
- 可选(Optional):用户可参考,自行决定是否采用;
- 推荐(Preferable):用户理应采用,但如有特殊情况,可以不采用;
- 必须(Mandatory):用户必须采用 (除非是少数非常特殊的情况,才能不采用);
注: 未明确指明的则默认为 必须(Mandatory)
本文档参考
主要参考如下文档:
源文件
基础
使用场景
仅建议Shell用作相对简单的实用工具或者包装脚本。因此单个shell脚本内容不宜太过复杂。
在选择何时使用shell脚本时时应遵循以下原则:
- 如主要用于调用其他工具且需处理的数据量较少,则shell是一个选择
- 如对性能十分敏感,则更推荐选择其他语言,而非shell
- 如需处理相对复杂的数据结构,则更推荐选择其他语言,而非shell
- 如脚本内容逐渐增长且有可能出现继续增长的趋势,请尽早使用其他语言重写
文件名
可执行文件不建议有扩展名,库文件必须使用 .sh 作为扩展名,且应是不可执行的。
执行一个程序时,无需知道其编写语言,且shell脚本并不要求具有扩展名,所以更倾向可执行文件没有扩展名。
而库文件知道其编写语言十分重要,使用 .sh 作为特定语言后缀的扩展名,可以和其他语言编写的库文件加以区分。
文件名要求全部小写, 可以包含下划线 _
或连字符 -
, 建议可执行文件使用连字符,库文件使用下划线。
正例:
my-useful-bin
my_useful_libraries.sh
myusefullibraries.sh
反例:
My_Useful_Bin
myUsefulLibraries.sh
文件编码
源文件编码格式为UTF-8。
避免不同操作系统对文件换行处理的方式不同,一律使用LF
。
单行长度
每行最多不超过120个字符。每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。
除了以下两种情况例外:
- 导入模块语句
- 注释中包含的URL
如出现长度必须超过120个字符的字符串,应尽量使用here document或者嵌入的换行符等合适的方法使其变短。
示例:
# DO use 'here document's
cat <<END;
I am an exceptionally long
string.
END
# Embedded newlines are ok too
long_string="I am an exceptionally
long string."
空白字符
除了在行结束使用换行符,空格是源文件中唯一允许出现的空白字符。
- 字符串中的非空格空白字符,使用转义字符
- 不允许行前使用tab缩进,如果使用tab缩进,必须设置1个tab为4个空格
- 不应在行尾出现没有意义的空白字符
垃圾清理 推荐
对从来没有用到的或者被注释的方法、变量等要坚决从代码中清理出去,避免过多垃圾造成干扰。
结构
使用bash
Bash 是唯一被允许使用的可执行脚本shell。
可执行文件必须以 #!/bin/bash
开始。请使用 set
来设置shell的选项,使得用 bash <script_name>
调用你的脚本时不会破坏其功能。
限制所有的可执行shell脚本为bash使得我们安装在所有计算机中的shell语言保持一致性。 正例:
#!/bin/bash
set -e
反例:
#!/bin/sh -e