https://mp.weixin.qq.com/s/IxSXF9yu_ybgW4H-AtULzw
GitHub 项目地址:https://github.com/koalaman/shellcheck
开发者经常会遇到过这种情况,写的 Shell 脚本看起来没毛病,结果一跑就报错。有时候错误信息还特别奇怪,看半天也不知道哪里出了问题,真的让人头疼。
前段时间我在 GitHub 上偶然发现了一个叫 ShellCheck 的项目,据说专门用来检查 Shell 脚本的语法和逻辑问题。听起来挺实用的,就想着试试看。
没想到用了之后发现,这玩意儿真的能帮我们避免很多低级错误,写脚本的时候心里也踏实多了。今天就来跟各位分享一下这个工具。
Screenshot of a terminal showing problematic shell script lines highlighted
主要功能
语法错误检测贼准
ShellCheck 能发现我们经常犯的那些基础错误,比如变量没加引号、括号用错了、赋值语句写错格式等等。这下我们再也不用因为一个空格问题调试半天了。
条件判断问题识别
我们写 if 语句的时候经常搞混各种操作符,什么时候用 [[]],什么时候用 [],老是记不清。这个工具会提醒我们哪些地方的条件判断有问题,避免写出永远为真或永远为假的判断。
Screenshot of Vim showing inlined shellcheck feedback
常用命令使用建议
像 find、grep 这些命令,我们平时用的时候可能不太注意一些细节,结果写出来的脚本在某些情况下就不工作了。ShellCheck 会指出这些潜在的问题。
代码风格优化提醒
虽然功能能实现,但代码写得不够优雅的地方,工具也会给出建议。比如用 $() 替代反引号,用重定向块替代多次重定向等等,让我们的脚本看起来更专业。
跨平台兼容性检查
如果我们的脚本需要在不同系统上运行,这个功能就特别有用了。它会提醒我们哪些语法在某些 Shell 环境下不支持。
Screenshot of emacs showing inlined shellcheck feedback
潜在安全风险提示
一些可能导致安全问题的写法,比如 rm 命令的危险用法,工具都会标出来。我们也不怕写出删除重要文件的脚本了。
安装指南
装起来不复杂,各个平台都支持。如果大家用的是 Ubuntu 或者 Debian 系统,直接 sudo apt install shellcheck 就搞定了。
用 macOS 的用户可以通过 Homebrew 安装:
brew install shellcheck。
Windows 用户也有选择,可以用
Chocolatey:choco install shellcheck
或
Scoop:scoop install shellcheck。
如果系统包管理器没有这个工具,还可以直接下载编译好的二进制文件。项目在 GitHub Releases 页面提供了各个平台的版本,下载解压就能用。
对于习惯用 Docker 的朋友,也有现成的镜像:
docker run –rm -v “$PWD:/mnt” koalaman/shellcheck:stable myscript
写在最后
体验了一段时间下来,感觉 ShellCheck 确实能帮我们写出更靠谱的脚本。虽然一开始会觉得提示有点多,但习惯了之后发现这些建议都挺有道理的。
当然这个工具也不是万能的,复杂的逻辑问题还是需要我们自己仔细测试。不过对于避免常见的语法错误和不规范写法,已经够用了。
如果各位平时也写 Shell 脚本,建议试试这个工具。反正是免费的,用起来也不麻烦,说不定能帮你省不少调试时间。
GitHub 项目地址:https://github.com/koalaman/shellcheck