Code前端首页关于Code前端联系我们

“蛇杖”开头:Linux Shell 脚本最佳实践

terry 2年前 (2023-09-28) 阅读数 59 #未命名

开头有“蛇棒”:Linux Shell脚本编程的最佳实践 代码风格定义 “蛇杖”开头

所谓 shebang 就是多个脚本一起出现的第一行“#! “开头的注释表示当我们不指定解释器时默认的解释器。一般来说,它可能看起来像这样:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

当然,翻译器有很多种类型。除了bash之外,我们还可以使用下面的命令来查看本机支持的解释器:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

当我们直接使用./a.sh执行这个脚本时,如果没有shebang,就会默认为特定的解释器。到 $SHELL,否则它将使用 shebang 定义的解释器。译者。

不过,上面的写法可能不太适应。基本上,我们这样定义:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

这就是我们使用的方法。 代码包含注释

当然,注释是常识,但需要再次强调的是,它们在shell脚本中非常重要。由于单个 shell 的命令不容易理解,因此如果不加注释就很难保留。

注释的重要性不仅在于解释如何使用它们,还在于告诉我们要看什么,就像README一样。
其实,对于 shell 脚本来说,注释一般包含以下部分:

  • shebang
  • 脚本参数
  • 脚本目标
  • 提前脚本编写时间、作者、版权等。
  • 每个函数前的解释性注释
  • 更复杂的单行命令注释
参数必须标准化

这一点很重要。当脚本需要接受令牌时,它必须首先确定令牌是否满足指定的条件,并提供适当的回显,以便用户更容易理解令牌的用法。

最起码要判断参数的个数:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践变量和幻数

一般情况下,我们会在一开始就定义一些重要的变量来保证它们的存在。变量。

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

这种描述方法有一个通用的用法。最常见的应用是,当我们本地安装了多个java版本时,我们可能需要指定使用哪个java。然后我们将在该控件的脚本开头重新定义 JAVA_HOME 和 PATH 变量。

同时,好的代码通常不会将“幻数”硬编码到代码中。如果一定存在的话,一般一开始就定义为变量,然后调用的时候直接调用该变量,方便以后修改。 有缩进规则

对于shell脚本来说,缩进是个大问题。因为很多需要缩进的地方(比如if、for语句)都不是很长,很多人懒得缩进,而且很多人不习惯使用函数,所以缩进功能较弱。

其实,正确的缩进非常重要,尤其是在写作品时,否则阅读时很容易将作品正文与直接命令混淆。

常见的标识方式有两种:“软表”和“硬表”。

  • 所谓的软制表符就是使用n个空格进行缩进(n通常为2或4)
  • 所谓的硬制表符,当然是指实际的字符“”
    Win I这里我不打算采用最好的方法,可以说各有其优点和缺点。反正我已经习惯用硬片了。
    对于 if 和 for 语句,then 和关键字最好不要分开写,这样看起来很难看。 。 。
有命名标准

所谓命名规范包括以下几点:

  • 定义文件名,以.sh结尾,方便识别。
  • 统一方法名称,写shell时一般使用小写字母和下划线
编码要统一

写脚本时尽量使用UTF-8编码,可以支持中文等奇数字符。然而,即使我会写中文,我仍然尝试用英文写评论和日志。毕竟很多机器不直接支持中文,打字会很混乱。

这里需要特别注意的一点是,我们在windows下使用utf-8编码编写shell脚本时,必须检查utf-8是否有BOM。默认情况下,Windows通过在文件开头添加三个EF BB BF字节来定义UTF-8格式,但在Linux上,默认没有BOM。因此,如果我们在Windows下编写脚本,就要考虑将编码改为Utf-8无BOM。一般情况下使用notepad++等编辑器即可编辑。否则,当在Linux下运行时,前三个字符将被识别,导致一些错误,说该命令不被接受。记得添加权限

虽然这是一个小点,但我个人经常忘记,不添加执行权限会导致无法直接执行,这有点烦人。 。 。 日志和回声

不言而喻,日志在大型项目中非常重要,因为它们允许我们返回并纠正错误。

如果这个脚本是想让用户直接在命令行使用的话,我们最好能够在执行过程中实时回放执行过程,方便用人单位监控。

有时候,为了提高用户体验,我们会给回声添加特效,比如颜色、闪电等。有关详细信息,请参阅 ANSI/VT100 控制序列介绍文章。 删除密码

不要在脚本中硬编码密码,不要在脚本中硬编码密码,不要在脚本中硬编码密码。

重要的事情说三遍,尤其是当脚本托管在像 Github 这样的平台上时。 。 。 如果太长,需要用线分隔。为了保证更好的阅读体验,我们可以使用反斜杠来分隔行:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

备注返回栏前面有空格。 代码详细说明代码性能

使用命令时,必须了解命令的特殊方法。尤其是当数据处理量较大时,必须时刻考虑是否会影响订单的性能。

例如以下两个sed命令:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

它们做同样的事情,它们都获取文件的第一行。但是第一个命令读取整个文件,但第二个命令只读取第一行。当文件很大时,这样不同的命令会导致性能上的巨大差异。

当然,这只是一个例子。此示例的正确用法是使用 head -n1 命令。 。 。 经常使用双引号

几乎所有专家都建议在使用“$”获取变量时使用双引号。

在很多情况下不输入双引号会导致很多问题。为什么?举个例子:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

他的手术结果如下:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

这是为什么?其实可以解释为他执行的是下面的命令:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

很多情况下,使用变量作为参数的时候,一定要考虑到上面的一点,理解其中的区别。上面是一个非常小的例子。在实际操作中,这个细节会带来太多问题。 。 。 巧妙地使用基本函数

我们知道像 Java 和 C 这样的编译语言都可以访问函数。该系统使代码易于阅读。我们知道哪些是实时的,哪些是工作。但剧本不同。该脚本以该语言解释并直接从第一行到最后一行执行。如果把命令和函数结合起来,阅读起来就会非常困难。

Python用户都知道,典型的Python脚本至少是这样的:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

它用非常巧妙的方式来实现我们习惯的基本功能,使代码更具可读性。

在shell中,我们也有类似的提示:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

我们可以使用这个脚本,实现类似的关键功能,让脚本更有条理。 想想scope

scope变量在shell中是全局的,就像下面的脚本:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

输出是2而不是1,这显然不符合套路。-我们容易生到。一些问题。

因此,与其直接使用全局变量,不如使用本地只读之类的命令。其次,我们可以使用语句来声明变量。这些方法比使用全局定义更好。 函数返回值

使用函数时不要忘记小心。 shell中函数的返回值只能是整数。可能是因为函数的返回值通常表示函数运行的状态,一般都是0或者1就可以了,所以就这样做了。但是,如果必须传递字符串,也可以使用以下替代方法:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

这样,您可以通过 echo 或 print 传递附加参数。 间接参考值

什么是间接参考?例如以下情况:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

我们有一个变量VAR1和一个变量VAR2。 VAR2 的值是 VAR1 的名称。所以现在我们想从 VAR2 中获取 VAR1 的值。我们现在应该做什么?

比较土气的风格如下:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

这种用法是可以的,但是看起来不舒服,很难理解。我们不推荐它。实际上,我们不建议使用 eval 命令。

更方便的表示法如下:

开头有“蛇棒”:Linux Shell脚本编程的最佳实践

可以通过插入 ! 来进行简单的间接引用。在变量名前面。

不过需要注意的是,使用上面描述的方法,我们只能得到一个值,而不能给出一个值。如果要赋值,必须使用eval来显式处理: 开头有“蛇棒”:Linux Shell脚本编程的最佳实践正确使用heredocs

所谓heredocs也可以认为是多行输入法,即定义一行。在“

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门