电子产业一站式赋能平台

PCB联盟网

搜索
查看: 155|回复: 0
收起左侧

推荐一款灰常牛皮的shell脚本排查工具

[复制链接]

354

主题

354

帖子

3951

积分

四级会员

Rank: 4

积分
3951
发表于 2024-8-16 11:39:00 | 显示全部楼层 |阅读模式

wketerjbcz364010796301.png

wketerjbcz364010796301.png

ShellCheck是一个广受欢迎的开源工具,旨在帮助开发者发现并修正他们的shell脚本中的错误。它可以对bash、sh、ksh和dash脚本进行静态分析,找出脚本中可能的问题,比如语法错误、被误用的命令、典型的编码失误、权限问题、以及一些可能导致脚本在不同情况下表现异常的逻辑错误。ShellCheck通过提供详细的警告和建议来帮助开发者提高脚本的可靠性和可维护性。
主要特点广泛的检查范围:ShellCheck能识别各种常见错误和陷阱,从而帮助开发者避免一些难以察觉的问题。
详细的反馈:对于检测到的每个问题,ShellCheck都会提供一个详细的解释,解释为什么这会是一个问题,以及如何修正它。
易于使用:ShellCheck可以通过命令行直接使用,也可以集成到文本编辑器和IDE中,如VS Code、Sublime Text和Vim等,还可以作为CI/CD流程中的一部分自动运行。
跨平台:它支持Linux、macOS和Windows等操作系统。
强大的社区支持:作为一个开源项目,ShellCheck拥有活跃的社区,不断有新的功能和改进被加入。
使用方法ShellCheck的使用通常很直接。你可以通过命令行运行它来检查脚本文件。例如:
shellcheck yourscript.sh
这会输出脚本中发现的所有建议和警告。
安装ShellCheck可以通过多种方式安装:
在Linux上,你可以通过包管理器安装,如使用apt(Debian/Ubuntu):
sudo apt-get install shellcheck
在macOS上,可以使用brew安装:
brew install shellcheck
在Windows上,可以通过chocolatey安装:
choco install shellcheck
此外,还可以通过Docker来运行ShellCheck,或者在其官方网站上直接在线使用。
项目地址ShellCheck的源代码托管在GitHub上:
https://github.com/koalaman/shellcheck
下面是一些使用ShellCheck的例子,展示了它是如何帮助开发者发现并改进他们的shell脚本的。
未引用的变量
[/ol]   # 错误示例
   echo $userinput
   # ShellCheck建议
   # SC2086: Double quote to prevent globbing and word splitting.
   # 修改后
   echo "$userinput"
遗漏的shebang
[/ol]   # 错误示例
   echo "Hello World"
   # ShellCheck建议
   # SC2148: Tips depend on target shell and yours is unknown. Add a shebang.
   # 修改后
   #!/bin/bash
   echo "Hello World"
使用未定义的变量
[/ol]   # 错误示例
   if [ $name == "John" ]; then
     echo "Hello, John!"
   fi
   # ShellCheck建议
   # SC2154: name is referenced but not assigned.
   # 修改后
   name="John"
   if [ "$name" == "John" ]; then
     echo "Hello, John!"
   fi
使用弃用的反引号执行命令
[/ol]   # 错误示例
   result=`ls`
   # ShellCheck建议
   # SC2006: Use $(...) notation instead of legacy backticked `...`.
   # 修改后
   result=$(ls)
避免命令失败时脚本继续执行
[/ol]   # 错误示例
   cd some_directory
   rm *
   # ShellCheck建议
   # SC2164: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
   # 修改后
   cd some_directory || exit
   rm *
不正确的if语句语法
[/ol]   # 错误示例
   if [$var -eq 1]
   then
     echo "True"
   fi
   # ShellCheck建议
   # SC1045: It's not 'if' condition, you need a space after the '['.
   # SC1073: Couldn't parse this test expression.
   # 修改后
   if [ $var -eq 1 ]; then
     echo "True"
   fi
不建议使用的序列表达式
[/ol]   # 错误示例
   echo {1..10}
   # ShellCheck建议
   # SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.
   # 修改后
   echo {1..10}
在循环中不正确地读取行
[/ol]   # 错误示例
   cat file.txt | while read line; do
     echo $line
   done
   # ShellCheck建议
   # SC2094: Make sure not to read and write the same file in the same pipeline.
   # 修改后
   while IFS= read -r line; do
     echo "$line"
   done 错误地使用echo输出变量
[/ol]   # 错误示例
   echo "Path: $PATH"
   # ShellCheck建议
   # SC2027: The surrounding quotes actually unquote this. Remove or escape them.
   # 修改后
   echo "Path: "$PATH""
为变量赋值和检查命令的退出状态
[/ol]    # 错误示例
    output=$(some_command)
    if [ $? -ne 0 ]; then
      echo "Command failed"
    fi
    # ShellCheck建议
    # SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $.
    # 修改后
    if ! output=$(some_command); then
      echo "Command failed"
    fi
通过上述例子,我们可以看到ShellCheck如何帮助识别和修正常见的shell编程错误,从而提高脚本的质量和可维护性。这些例子仅仅是ShellCheck能够检测的问题类型的一部分。更多详细信息和高级用法,建议查看官方文档和GitHub上的项目页面。
波哥IT行业近二十年的IT老炮。常年潜伏于国企、各一二线大厂中。硬件集成入行,直至虚拟技术、容器化。岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。
主要作品:IT类资源汇聚门户:https://www.98dev.com
各大短视频平台:98dev
各大主要技术论坛博客:IT运维技术圈
长视频教学作品:《波哥讲网络》《波哥讲git》《波哥讲gitlab》
小程序:IT面试精选
构建技术社区:+V itboge1521 入学习交流群
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表