如何在 Linux 中使用 Shfmt 格式化 Shell 程序

在本指南中,我们将讨论什么是 Shfmt,如何在 Linux 中安装 Shfmt,最后如何在 Linux 中使用 Shfmt 格式化 shell 程序。

内容

  1. 一、简介
  2. 2.在Linux中安装Shfmt
  3. 3、Linux下使用Shfmt格式化shell程序
    1. 3.1. 自定义缩进
    2. 3.2. 差异风格输出
    3. 3.3. 列出要格式化的脚本
    4. 3.4. 将输出写入文件
    5. 3.5. 在路径中查找shell脚本
    6. 3.6. Shfmt 也可以检测错误
    7. 3.7. 外部编辑器中的 Shfmt
  4. 结论

一、简介

如果您有编程背景,您可能知道格式化、linting 等术语。

每个代码编辑器都附带了重要的支持工具,可让我们在编码时轻松生活。

同样,对于 shell 脚本,我们有 换档. shfmt 用于格式化、解析和解释您的 shell 脚本。 Shfmt 支持 Bash、mksh 和 Posix shell。

Shfmt 是高度可配置的,可以以多种方式和约定格式化您的代码。

您可以从命令行安装和使用 Shfmt 工具来处理您的 shell 脚本。 在流行的文本编辑器中也有可用的插件,它们将使用 shfmt 来格式化您的 shell 脚本。

2.在Linux中安装Shfmt

Shfmt 可用作 snap 应用程序。 如果您的发行版安装了 snap,您可以使用以下命令安装 shfmt:

$ sudo snap install shfmt

另一种安装 Shfmt 的方法是使用以下单行命令:

$ curl -sS https://webinstall.dev/shfmt | bash

无论您运行什么发行版,都可以使用上述两种方法。 有几个发行版,您可以从它们的软件包存储库中安装 shfmt。

要在 Alpine Linux 中安装 shfmt,请运行:

$ sudo apk add shfmt

在 Arch Linux、EndeavourOS 和 Manjaro Linux 中安装 shfmt:

$ sudo pacman -S shfmt

在 FreeBSD 中安装 shfmt。

$ sudo pkg install devel/shfmt
$ sudo pkg install shfmt

3、Linux下使用Shfmt格式化shell程序

如果这是您第一次使用 Shfmt,请首先运行 help 命令以了解 shfmt 支持哪些选项:

$ shfmt --help

现在,请允许我向您展示一个示例。 我创建了一个没有正确格式的 shell 脚本。

示例脚本

看看上面的图片。 看起来很奇怪,对吧?

让我们使用 shfmt 像下面这样:

$ shfmt dummy.sh

Shfmt 将开始格式化给定的脚本。

以下是优化前后上述脚本的输出:

使用 shfmt 格式化 shell 程序

从上面的输出中,您可以看到我们的脚本格式很好。

你可能想知道为什么缩进被设置为 标签. 这是默认的并且可以修改。

3.1. 自定义缩进

我总是跟随 google shell 脚本样式文档 并将缩进设置为 2格 而不是标签。

设置自定义缩进使用 -i 旗帜。 让我们看看帮助菜单对此有何评论 -i 旗帜:

使用 shfmt 自定义缩进使用 shfmt 自定义缩进

任何大于零的值都通过 -i 标志是将要使用的空间量。

$ shfmt -i 2 scriptname.sh
使用 shfmt 设置缩进使用 shfmt 设置缩进

3.2. 差异风格输出

如果您需要有关确切格式化的信息,可以使用 -d 旗帜。 看一下下图,它显示了以绿色格式化的内容 + 象征。

差异风格输出差异风格输出

3.3. 列出要格式化的脚本

您可以使用 -l 标志,它将获得需要格式化的脚本列表。

为了演示这一点,我将创建三个脚本文件。 我没有格式化第二个和第三个脚本。 而且我已经给了很多空间 echo 第二个和第三个文件的声明。

输入脚本输入脚本

现在,如果我运行 shfmt 命令 -l 标志,它应该只选择我的第二个样本 2 和 3 文件:

$ shfmt -l sample*.sh sample2.sh sample3.sh
要格式化的脚本列表要格式化的脚本列表

3.4. 将输出写入文件

默认情况下,Shfmt 将格式化脚本的输出写入 stdout,也就是终端。 如果要将输出写入文件,可以使用 -w 旗帜。

$ shfmt -w scriptname.sh

3.5. 在路径中查找shell脚本

-f 标志,shfmt 将递归扫描给定目录并找到所有 shell 脚本。

脚本是否具有扩展名并不重要 .sh 或不。 Shfmt 可以识别所有的 shell 脚本,即使它们没有扩展名。

$ shfmt -f /home/ostechnix /home/ostechnix/.config/envman/load.sh /home/ostechnix/.local/bin/webi /home/ostechnix/Downloads/sampleshell /home/ostechnix/dummy.sh

3.6. Shfmt 也可以检测错误

Shfmt 不仅仅用于格式化 shell 脚本。 它还可以发现脚本中的错误。

看看下图,我用来终止函数的大括号丢失了,shfmt 发现了它。

Shfmt 可以检测脚本中的语法错误Shfmt 可以检测脚本中的语法错误

您还可以使用 bash 使用内置语法检查功能 -n 标志将验证您的代码和
列出所有错误。

$ bash -vn scriptname.sh

3.7. 外部编辑器中的 Shfmt

实时,您可以选择任何一种文本编辑器,例如 Vim、Atom、Sublime Text、Vs 代码等。其中一些文本编辑器可能具有对格式的本机支持 bash 脚本。

每个代码编辑器都有一个与 shfmt 集成的插件。 转到 GitHub 官方存储库(链接在末尾),在页面底部,您将在下方看到每个使用 shfmt 的文本编辑器的插件列表。

结论

在本指南中,我们通过实际示例了解了什么是 Shfmt 以及如何使用 Smfmt 格式化 Shell 程序。 Shfmt 将是一个非常有用的工具,可以让您的脚本保持干净、整洁和有条理。 与文本编辑器集成,您将在创建脚本时拥有非常流畅的工作流程。

资源:

  • Shfmt GitHub 存储库

相关阅读:

  • ShellCheck – 一个免费的工具来查找你的 Shell 脚本中的错误
  • 使用 run-parts 命令运行脚本时修复“Exec 格式错误”
  • 如何在 Linux 中运行目录中的所有脚本
  • 如何使用 Linux 命令行工具解析和漂亮打印 JSON

来自Pixabay的精选图片。

格式化shell脚本LinuxProgrammingScriptingshell scriptsShfmt