Linux shellcheck工具

news2024/11/24 17:48:12

安装工具

        通过linux yum源下载,可能因为yum源的问题找不到软件包,或者下载的软件包版本太旧。

 

ShellCheck的源代码托管在GitHub上(推荐下载方式):

GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts

 

 

        对下载的可执行程序压缩包进行解压,将shellcheck可执行命令加入环境变量:拷贝至/bin/下,以方便在任何位置都可以通过tab键补齐shellcheck并使用。

使用shellcheck

#!/bin/bash  

# 设置编译器和编译选项  
COMPILER=arm-linux-gnueabihf-g++ #CPP编译器
COMPILE_FLAGS_JSONCPP="-L /usr/local/lib /usr/local/lib/libjsoncpp.a"  #链接 jsoncp库
COMPILE_FLAGS_CGICC="-I /usr/local/cgicc-3.2.20/include -L /usr/local/cgicc-3.2.20/lib -lcgicc"  #链接 cgicc库
COMPILE_FLAGS_SQLITE3="-I /usr/local/sqlite3/include/ -L /usr/local/sqlite3/lib/ -lsqlite3"  #链接 sqlite3库
COMPILE_FLAGS_OPENSSL="-I /usr/local/arm-openssl-3.0/include/ -L /usr/local/arm-openssl-3.0/lib64/ -lcrypto"  #链接 crypto库

UPHOLD_TOOLS=uphold_tools
cd $UPHOLD_TOOLS
$COMPILER -o $UPHOLD_TOOLS.cgi $UPHOLD_TOOLS.cpp $COMPILE_FLAGS_CGICC $COMPILE_FLAGS_JSONCPP $COMPILE_FLAGS_OPENSSL
if [ $? -ne 0 ]; then
	echo "Error compiling $UPHOLD_TOOLS"
	exit 1  
fi
SYSTEM_REBOOT=system_reboot
$COMPILER -o $SYSTEM_REBOOT.cgi $SYSTEM_REBOOT.cpp $COMPILE_FLAGS_CGICC $COMPILE_FLAGS_JSONCPP
if [ $? -ne 0 ]; then
	echo "Error compiling $SYSTEM_REBOOT"
	exit 1  
fi
cd ..
#拷贝.cgi和.sh到radio-gateway中
find $UPHOLD_TOOLS -type f \( -name "*.cgi" -o -name "*.sh" \) -exec cp {} ../radio-gateway/cgi-bin/$UPHOLD_TOOLS \;
if [ $? -ne 0 ]; then  
	echo "Error copy $UPHOLD_TOOLS"
	exit 1
fi

#拷贝web源代码到radio-gateway中
cp -r ../web ../radio-gateway/
rm -rf ../radio-gateway/web/index.html
cp ../web/index.html ../radio-gateway/

echo "Compilation and copy successful."

优化建议:

[root@localdomain home]# shellcheck compile.sh 

In compile.sh line 7:
COMPILE_FLAGS_SQLITE3="-I /usr/local/sqlite3/include/ -L /usr/local/sqlite3/lib/ -lsqlite3"  #链接 sqlite3库
^-------------------^ SC2034 (warning): COMPILE_FLAGS_SQLITE3 appears unused. Verify use (or export if used externally).


In compile.sh line 11:
cd $UPHOLD_TOOLS
^--------------^ SC2164 (warning): Use 'cd ... || exit' or 'cd ... || return' in case cd fails.

Did you mean: 
cd $UPHOLD_TOOLS || exit


In compile.sh line 12:
$COMPILER -o $UPHOLD_TOOLS.cgi $UPHOLD_TOOLS.cpp $COMPILE_FLAGS_CGICC $COMPILE_FLAGS_JSONCPP $COMPILE_FLAGS_OPENSSL
                                                 ^------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                      ^--------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                                             ^--------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
$COMPILER -o $UPHOLD_TOOLS.cgi $UPHOLD_TOOLS.cpp "$COMPILE_FLAGS_CGICC" "$COMPILE_FLAGS_JSONCPP" "$COMPILE_FLAGS_OPENSSL"


In compile.sh line 13:
if [ $? -ne 0 ]; then
     ^-- SC2181 (style): Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?.


In compile.sh line 18:
$COMPILER -o $SYSTEM_REBOOT.cgi $SYSTEM_REBOOT.cpp $COMPILE_FLAGS_CGICC $COMPILE_FLAGS_JSONCPP
                                                   ^------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.
                                                                        ^--------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
$COMPILER -o $SYSTEM_REBOOT.cgi $SYSTEM_REBOOT.cpp "$COMPILE_FLAGS_CGICC" "$COMPILE_FLAGS_JSONCPP"


In compile.sh line 19:
if [ $? -ne 0 ]; then
     ^-- SC2181 (style): Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?.


In compile.sh line 23:
cd ..
^---^ SC2103 (info): Use a ( subshell ) to avoid having to cd back.


In compile.sh line 26:
if [ $? -ne 0 ]; then  
     ^-- SC2181 (style): Check exit code directly with e.g. 'if ! mycmd;', not indirectly with $?.

For more information:
  https://www.shellcheck.net/wiki/SC2034 -- COMPILE_FLAGS_SQLITE3 appears unu...
  https://www.shellcheck.net/wiki/SC2164 -- Use 'cd ... || exit' or 'cd ... |...
  https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
[root@localdomain home]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10.高级存储过程技巧(10/10)

高级存储过程技巧博客大纲 引言 在现代数据库管理系统中,存储过程作为提升数据操作效率和安全性的关键工具,已被广泛应用于各种数据库操作中。存储过程是一组为了完成特定功能的SQL语句集合,这些语句在数据库中被保存、编译和优化&#xff0…

Chromium 前端window对象c++实现定义

前端中window.document window.alert()等一些列方法和对象在c对应定义如下: 1、window对象接口定义文件window.idl third_party\blink\renderer\core\frame\window.idl // https://html.spec.whatwg.org/C/#the-window-object// FIXME: explain all uses of [Cros…

【原创】java+springboot+mysql在线课程学习网设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

陪诊小程序搭建:打造便利的陪诊环境

陪诊行业作为一个新兴行业,随着老龄化的严重,在近几年中需求量日益旺盛。陪诊师为大众的就医提供了极大的便利性,在看病难、医疗资源紧张方面发挥了积极作用。 在陪诊行业的快速发展下,陪诊小程序为行业带来了便捷的模式&#xf…

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器 源链接:https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idchinaFlag 国内站点预览:http://threehub.cn github地址: https://github.com/z2586300277/three-ce…

数学建模算法与应用 第6章 微分方程建模及其求解方法

目录 6.1 微分方程建模概述 6.2 发射卫星与三阶火箭建模 Matlab代码示例:火箭发射模拟 6.3 微分方程数值解法 Matlab代码示例:欧拉法与龙格-库塔法 6.4 放射性废料的处理 Matlab代码示例:放射性衰变 6.5 初值问题的Matlab数值求解 习…

Java项目:149 基于SSM的毕业设计管理系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 毕业设计管理系统 介绍 毕业设计是本科教育的最后一个环节,整个过程包括课题拟定与审核、师生双选、开题报告、文档审核、中期检查、毕业答…

C++ 比大小

//输入两个可能有前导 0 的大整数&#xff0c;a,b请输出他们谁大谁小#include <iostream> #include <string> #include <string.h> using namespace std; #define M 100005 int main() {char a[M], b[M];char *pa, *pb;pa a;pb b;cin >> a >> …

Linux的pinctrl和gpio子系统

上一章我们编写了基于设备树的 LED 驱动&#xff0c;但是驱动的本质还是没变&#xff0c;都是配置 LED 灯所使用的 GPIO 寄存器&#xff0c;驱动开发方式中硬件初始化这一部分和裸机基本没啥区别。Linux 是一个庞大而完善的系统&#xff0c;尤其是驱动框架&#xff0c;像 GPIO …

软考《信息系统运行管理员》- 4.1信息系统软件运维概述

4.1信息系统软件运维概述 文章目录 4.1信息系统软件运维概述信息系统软件运维的概念信息系统软件的可维护性及维护类型对软件可维护性的度量可以从以下几个方面进行&#xff1a;软件维护分类&#xff1a; 信息系统软件运维的体系1.**需求驱动**2.**运维流程**3.**运维过程**4.*…

ApiPost7一键压测

首先我们需要确认apipost已登录所需测试接口的后端 这边有个一键压测功能&#xff0c;可以帮助我们未下测试工具的同学直接进行接口测试 第一步&#xff1a;修改调试参数 首先我们需要在调试中把要传的参数设计成以下格式&#xff0c;确保后续压测功能成功执行 第二步&am…

MySQL-05.DDL-图形化界面工具

一.数据库图形化界面工具介绍 datagrip是Oracle公司所提供的一款专门用于操作数据库的图形化界面工具&#xff0c;目前已经被集成在了idea中&#xff0c;可以直接通过idea进行操作而不需要下载安装datagrip。 二.在idea中使用datagrip操作数据库 1.首先创建一个空项目 2.接着…

标准Netty框架的云快充协议+桩直连协议+云快充1.5 -1.6

软件架构 1、提供云快充底层桩直连协议&#xff0c;版本为云快充1.5&#xff0c;对于没有对接过充电桩系统的开发者尤为合适&#xff1b; 2、包含&#xff1a;启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等&#xff1b;…

selenium的IDE插件进行录制和回放并导出为python/java脚本(10)

Selenium IDE&#xff1a;Selenium Suite下的开源Web自动化测试工具&#xff0c;是Firefox或者chrome的一个插件&#xff0c;具有记录和回放功能&#xff0c;无需编程即可创建测试用例&#xff0c;并且可以将用例直接导出为可用的python/java等编程语言的脚本。 我们以chrome浏…

数字化装备场管理系统|DW-S301-A系统主要功能介绍

数字化装备场系统DW-S301-A以物联网技术为核心&#xff0c;通过软硬件集成建设&#xff0c;总体上实现动用管控、维护保养、故障维修、物资管理、电子履历、场区管理、态势展现等功能。 1.动用管控功能 通过应用软件与单装自动识别铭牌、车辆门禁等硬件设备联动&#xff0c;实…

进程间通信 —— 《命名管道》

文章目录 前言&#xff1a;命名管道的原理&#xff1a;代码编写&#xff1a; 前言&#xff1a; 在前面的一文&#xff0c;我们主要介绍了关于进程间的通信是如何实现的&#xff0c;以及引入了进程间通信的前提——“要让两个进程在OS中看到同一份资源”&#xff0c;而对于父子…

Spring Boot知识管理:智能搜索与分析

3系统分析 3.1可行性分析 通过对本知识管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本知识管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

HTML+CSS实现固定的半透明底部导航栏

实现固定的半透明底部导航栏 在网页设计中&#xff0c;固定底部导航栏是一种常见的设计模式&#xff0c;尤其适用于移动端或简洁的网页布局。通过CSS&#xff0c;我们可以轻松实现固定位置、半透明效果、以及图片的动态缩放。本文将详细介绍如何使用HTML和CSS实现一个固定且具…

stderr和磁盘理解

1.stderr stderr文件默认的文件标识符是2&#xff0c;指向显示器&#xff0c;用来输出错误信息 #include<stdio.h>int main() {fprintf(stdout,"hello stdout\n");fprintf(stderr,"hello stderr\n");return 0; }stdout和stderr默认是指向显示器的&…

Postman发送GET、POST请求

Postman发送GET、POST请求 GET请求 在这里选择GET请求&#xff0c;接着输入请求的URL&#xff0c;点击发送即可看到服务端返回的数据。 POST请求 post请求通常会携带body数据&#xff0c;比get请求麻烦一点的是需要在Body里输入要携带的body数据&#xff0c;按照箭头所指示的…