如何在 Alpine Linux 上安装 shellcheck
Shellcheck是一个静态分析 shell 脚本的工具。遗憾的是,Alpine Linux 服务器或开发者机器上默认没有安装 Shellcheck。因此,我们需要使用apk 命令在 Alpine Linux 上安装 Shellcheck 。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 或 Unix 终端 |
类别 | 包管理器 |
先决条件 | apk 命令 |
操作系统兼容性 | Alpine • Linux |
预计阅读时间 | 4 分钟 |
在 Alpine Linux 上安装 shellcheck
安装shellcheck的步骤如下:
- 打开终端应用程序。
- 对于远程云服务器使用 ssh 命令登录。例如:
{vivek@example-desktop:~}$ ssh vivek@server1.example.com
- 首先,更新 apk repo
{root@ln-sg-vpn-1:~}# apk update
{root@ln-sg-vpn-1:~}# apk upgrade - 搜索包,输入:
{root@ln-sg-vpn-1:~}# apk search shellcheck
- 获取有关包的信息,输入:
{root@ln-sg-vpn-1:~}# apk info shellcheck
- 最后,使用apk 命令安装 Shellcheck :
{root@ln-sg-vpn-1:~}# apk add shellcheck
安装 shellcheck(点击放大)
shellcheck 语法
shellcheck 命令的语法如下。
$ shellcheck script-file-name
$ shellcheck [options] script-file-name
使用示例测试 shellcheck
首先,使用 bash shell 终端在 Linux 中创建一个文件,运行:
让我们编写简单的Hello World Bash Shell 脚本:
$ vim demo.sh
## OR ##
$ nano demo.sh
#!/bin/bash # Name: demo.sh # Usage: Hello World Bash Shell Script Using Variables # Author: Vivek Gite # ------------------------------------------------- # Define bash shell variable called var # Avoid spaces around the assignment operator (=) var="Hello World" # print it echo $var # Another way of printing it printf "%s\n" $var echo Date is $(date)设置可执行权限并运行脚本如下: 现在检查语法警告或错误: 您可能会看到以下内容:
$ chmod -v +x demo.sh
$ ./demo.sh
$ shellcheck demo.sh
In demo.sh line 11: echo $var ^--^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: echo "$var" In demo.sh line 14: printf "%s\n" $var ^--^ SC2086: Double quote to prevent globbing and word splitting. Did you mean: printf "%s\n" "$var" In demo.sh line 16: echo Date is $(date) ^-----^ SC2046: Quote this to prevent word splitting.
让我们应用这些修复。
更新版本
按如下方式编辑 demo.sh 并根据 linter 的建议应用修复:
#!/bin/bash # Name: demo.sh # Usage: Hello World Bash Shell Script Using Variables # Author: Vivek Gite # ------------------------------------------------- # Define bash shell variable called var # Avoid spaces around the assignment operator (=) var="Hello World" # print it echo "$var" # Another way of printing it printf "%s\n" "$var" echo "Date is $(date)"
再次测试:
$ shellcheck demo.sh
看,没有警告。就这些。您的 shell 脚本现在很完美。
关于 Docker 镜像的说明
您的 Alpine Linux 上是否安装了 Docker?然后您可以按如下方式检查名为 foo.sh 的脚本:
$ docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable demo.sh
demo.sh 的示例会话:
Unable to find image 'koalaman/shellcheck:stable' locally stable: Pulling from koalaman/shellcheck ee9c4b55cadb: Pull complete 7d79c83e79c5: Pull complete Digest: sha256:f35e8987b02760d4e76fc99a68ad5c42cc10bb32f3dd2143a3cf92f1e5446a45 Status: Downloaded newer image for koalaman/shellcheck:stable In foo.sh line 12: echo $var ^--^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: echo "$var" In foo.sh line 15: printf "%s\n" $var ^--^ SC2086 (info): Double quote to prevent globbing and word splitting. Did you mean: printf "%s\n" "$var" In foo.sh line 17: echo Date is $(date) ^-----^ SC2046 (warning): Quote this to prevent word splitting. For more information: https://www.shellcheck.net/wiki/SC2046 -- Quote this to prevent word splitt... https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
以下是 Alpine Linux 上使用的 docker 命令的详细说明:
$ docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable demo.sh
- docker run:在 Alpine Linux 上运行 Docker 容器命令。
- --rm:此选项告诉 Docker 在使用 Docker 容器运行完 shellcheck 命令后删除该容器。
- -v "$PWD:/mnt" :此选项将从名为“ $PWD ”的 shell 变量获取的当前目录挂载容器中的/mnt目录。
- koalaman/shellcheck:stable:这是用于运行容器的 Docker 镜像的名称。如果找不到镜像,则会从 Docker hub 中拉取。
- demo.sh:这是将在容器中使用 shellcheck 测试的 shell 脚本的名称。
总结
想要了解有关 shellcheck 的更多信息?请访问 shellcheck文档 wiki或使用 help 命令或 man 命令在开发工作站上阅读:
$ man shellcheck
$ shellcheck --help