Linux怎么检查Shell脚本代码规范使用shellcheck工具

小辰酱_8213

小辰酱_8213

2026-10-03

688人浏览

原创

shellcheck 是专治 shell 脚本语法错误、运行时陷阱及方言兼容性问题的静态分析工具;它不检查缩进、换行、空格等代码规范,而是精准识别未引号变量、未定义变量、波浪符不展开、类型误用等导致崩溃或行为异常的问题,并依 shebang 或 -s 参数进行方言感知分析。

linux怎么检查shell脚本代码规范使用shellcheck工具

ShellCheck 不是用来检查“代码规范”的,它专治语法错误、运行时陷阱和 shell 方言兼容性问题;所谓缩进风格、for是否换行、空格数量、变量命名这些,它一概不报——别指望它替代 shfmt 或人工 CR。

shellcheck 安装后直接跑命令就能用

不用配环境、不依赖 Python、不需编译。各发行版安装方式不同,但使用统一:

  • Ubuntu/Debian:sudo apt install shellcheck
  • RHEL/CentOS(需先启用 EPEL):sudo yum install epel-release && sudo yum install ShellCheck
  • macOS:brew install shellcheck
  • Windows:下载 shellcheck.exe,加到 PATH 环境变量里

装完执行 shellcheck --version 确认可用。它不写配置文件,也不需要初始化项目,脚本丢过去就查。

shellcheck 会报哪些典型问题

它不关心你用了几个空格,但会揪出真正导致崩溃或行为异常的写法:

Alpine Linux
Alpine Linux

获取最新发布版本;聚合最新版本架构

下载
  • echo $HOME → 报 SC2086:未引号变量,遇到路径含空格就裂开
  • if [ $var = "ok" ] → 报 SC2153:未定义变量,且 [ ] 中变量为空时语法非法
  • rm "$file" 但 $file 是 ~/my file.txt → 报 SC2088:波浪符在引号内不展开
  • for f in *.log; do ... → 报 SC2068:未用 "${array[@]}" 风格,通配符可能意外展开
  • if [[ $a -eq $b ]]; then 但 $a 是字符串 "abc" → 报 SC2154:数值比较前未校验类型,bash 会静默转成 0

每条警告都带编号(如 SC2086),去 https://www.shellcheck.net/wiki/SC2086 就能看原理+修复示例。

别把 shellcheck 当 lint 工具用

它不会提醒你 “for 和 do 应该换行”,也不会说 “函数名应该小写下划线”。它的强项是:

  • 识别 #!/bin/sh 脚本里误用 [[ 或 (( 导致在 dash 下直接失败
  • 发现 $(ls) 这种无意义命令替换(SC2012)
  • 指出 cd dir 没检查返回值,目录不存在时脚本仍往下执行(SC2164)
  • 检测到 eval 或 set -e 使用不当引发静默失败

如果你真想统一风格,得搭配 shfmt -w -i 2 script.sh 自动格式化,再用 shellcheck 查逻辑缺陷——两者定位完全不同。

最容易被忽略的是方言感知:同一行 (( area = 3.14 * r * r )),在 #!/bin/sh 下报错,在 #!/bin/bash 下只警告不支持小数,在 #!/bin/ksh 下完全放过。不写 shebang 或乱设 -s 参数,shellcheck 的建议就可能南辕北辙。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3810

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3293

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2413

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5790

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5442

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3213

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2705

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2939

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习