当前位置: 首页 > news >正文

又一款强大好用的Shell脚本项目,支持Bash,Sh、Dash、Ksh等,甚至可以在编辑器中直接用,程序员必备!(附源码)

作为一个程序员,肯定经常都要和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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AIGC大模型扩图:Sanster/IOPaint(4)
  • CyclicBarrier CountDownLatch
  • CSS 基础
  • 15.2 定义一个prometheus数据存储使用的pv
  • 若依Ruoyi之智能售货机运营管理系统(新增运营运维工单管理)
  • 第151天:红队APT-钓鱼篇邮件钓鱼SPF绕过自建邮件系统SwaksGophish
  • 如何让Google收录我的网站?
  • Docker 部署 Redis (图文并茂超详细)
  • 如何通俗易懂的解释TON的智能合约
  • HarmonyOS开发5.0【应用程序包】
  • webctf
  • 【机器学习-监督学习】集成学习与梯度提升决策树
  • 使用xml文件创建虚拟机
  • 【C++】容器
  • 数据结构与算法图论 并查集
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • AngularJS指令开发(1)——参数详解
  • Asm.js的简单介绍
  • C学习-枚举(九)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • HTML5新特性总结
  • in typeof instanceof ===这些运算符有什么作用
  • Javascript弹出层-初探
  • Mocha测试初探
  • Netty 4.1 源代码学习:线程模型
  • PAT A1092
  • Python_网络编程
  • Ruby 2.x 源代码分析:扩展 概述
  • 官方解决所有 npm 全局安装权限问题
  • 和 || 运算
  • 问题之ssh中Host key verification failed的解决
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (39)STM32——FLASH闪存
  • (C++哈希表01)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (三) diretfbrc详解
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core 成都线下面基会拉开序幕
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .Net转前端开发-启航篇,如何定制博客园主题
  • ??javascript里的变量问题
  • @JoinTable会自动删除关联表的数据
  • @Query中countQuery的介绍