作为一个程序员,肯定经常都要和shell脚本打交道,Shell脚本可以帮我们自动化各种任务,但也经常有格式错误、拼写错误、逻辑错误等等麻烦,而且它不会告诉你错在哪里!
今天就给大家分享一个超级实用的开源项目 - ShellCheck
,好比我们在漆黑的房间里找钥匙,而ShellCheck就是我们的手电筒。
简介
ShellCheck
是一个开源的静态分析工具,专门给shell脚本号号脉,找出其中的问题,比如语法错误、不规范的编码习惯、甚至是安全漏洞。
它不仅支持Bash,还支持Sh、Dash、Ksh等等。你可以用它来检查代码,也可以集成到CI/CD流水线中,甚至可以在编辑器中直接用。
它就像一位严格的老师,让我们的脚本远离错误和不良习惯。
主要的功能特色有:
-
多shell支持:不管是 Bash 还是其他 shell 脚本,它都能帮你检查。
-
静态分析:不用运行脚本,它就能帮你抓出隐藏在角落里的小问题。
-
具体错误提示:它会告诉你问题具体出在哪一行,并给出详细解释和修正建议。
-
CI/CD集成:可以把ShellCheck集成到你的代码提交流程中,避免低级错误流入生产环境。
-
编辑器支持:支持很多编辑器插件支持,可以在VSCode、Sublime、Vim、Emacs中直接用。
-
多平台支持:Linux、macOS、Windows都可以运行使用。
快速安装
安装方法有很多,比较简单的方式是使用包管理器,如:
# 对于Debian/Ubuntu用户:
sudo apt-get install shellcheck
# 对于MacOS用户:
brew install shellcheck
#windows系统(使用 chocolatey):
choco install shellcheck
或者官方提供了一个在线的demo供我们快速体验:
https://www.shellcheck.net/#
项目使用体验
安装好后我们就可以开始使用了。
假设我们有一个简单的脚本example.sh
:
#!/bin/bash
# 打印用户输入
echo "User input is: $1"
# 创建目录,如果不存在
mkdir /tmp/myfolder
# 切换到新目录
cd /tmp/myfolder
# 列出目录内容
ls -l
用ShellCheck检查一下,它可能会告诉你:
Line 10:
cd /tmp/myfolder
^-- SC2164 (warning): Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
Did you mean: (apply this, apply all SC2164)
cd /tmp/myfolder || exit
$
直接指出了shell中存在的问题,并给了修改建议。
最后修改的shell为
#!/bin/bash
# 打印用户输入
echo "User input is: $1"
# 创建目录,如果不存在
mkdir /tmp/myfolder
# 切换到新目录
cd /tmp/myfolder || exit
# 列出目录内容
ls -l
是不是非常的酷!!
当然,ShellCheck 也不是能够识别所有的错误,主要有如错误引用、错误的条件声明等等,大家可以自行去项目主页进行查看。
体验下来,不得不说,ShellCheck
确实一个不可多得的Shell脚本开发辅助工具,它能够帮助你更有效地编写、维护和调试Shell脚本,提高我们的工作效率和脚本质量。
关于该项目的更多细节,感兴趣的可以到项目地址查看:
Github地址:https://github.com/koalaman/shellcheck