linux系统ShellCheck检查shell脚步语法正确的工具

27 篇文章 0 订阅
19 篇文章 0 订阅

目录

ShellCheck

安装ShellCheck 、dnf、yum

源代码编译

步骤如下:

示例命令:

方法三:使用其他第三方仓库、COPR 仓库

假设 ShellCheck 输出如下:

分析输出

修改脚本

再次运行 ShellCheck

1. Shell 脚本最佳实践

主题概述

案例与说明

2. Shell 脚本调试技巧

set -x、bash -n、bash -c、bash -i、说明:


ShellCheck

  1. ShellCheck: ShellCheck 是一个静态分析工具,可以检查 Bash 脚本中的常见错误和潜在问题。它可以作为命令行工具使用,也可以集成到编辑器和 IDE 中。安装 ShellCheck 后,只需运行 shellcheck yourscript.sh 即可。如:

shellcheck renet.sh

 

不同的系统安装Shellcheck软件可能会有不同,软件包是在epel仓库中

安装ShellCheck 、dnf、yum

如:Centos 9

# 添加 EPEL 仓库
dnf install -y epel-release

# 更新仓库列表
dnf makecache fast

# 安装 ShellCheck
dnf install -y shellcheck

 Centos 7

yum -y install epel-release
yum -y install ShellCheck

案例:

源代码编译

如果通过 EPEL 仓库仍然找不到 ShellCheck,你可以考虑从源代码编译安装。ShellCheck 的源代码可以从 GitHub 上获取。

步骤如下:
  1. 安装依赖项:确保安装了必要的构建工具和依赖项。
  2. 下载源代码:从 GitHub 下载 ShellCheck 的最新源代码。
  3. 编译并安装:按照 ShellCheck 提供的说明进行编译和安装。
示例命令:
# 安装依赖项
sudo dnf install -y make bison flex gcc gcc-c++ perl-ExtUtils-MakeMaker

# 下载源代码
git clone https://github.com/koalaman/shellcheck.git
cd shellcheck

# 编译
make

# 安装
sudo make install

方法三:使用其他第三方仓库、COPR 仓库

除了 EPEL 外,还有一些其他的第三方仓库可能已经包含了 ShellCheck 的包。例如,COPR 是一个允许用户创建和分享自定义 RPM 包的平台。

添加 COPR 仓库

dnf copr enable copr.fedorainfracloud.org/copronym/shellcheck
  1. 安装 ShellCheck
dnf install -y shellcheck

假设 ShellCheck 输出如下:

example.sh: line 4: SC2086: Double quote to prevent globbing and word splitting. example.sh: line 6: SC2154: '1' is referenced but not assigned.

分析输出

  1. SC2086: Double quote to prevent globbing and word splitting.

    • 这意味着你在使用变量时没有使用双引号。在这个例子中,ShellCheck 建议我们在 [ "$1" = "hello" ] 这一行使用双引号,即改为 [ "$1" = "hello" ]。这是因为如果没有双引号,变量 $1 的值可能会被 shell 解释为多个单词,导致错误的行为。
  2. SC2154: '1' is referenced but not assigned.

    • 这个警告表示脚本中引用了一个未被赋值的变量 1。这里的 1 实际上应该是 $1,这是一个常见的误报,因为 ShellCheck 试图解析脚本中的语法结构。在这个特定的例子中,$1 已经被正确地使用了,所以这个警告可以忽略。

修改脚本

根据 ShellCheck 的建议,我们可以修改脚本来避免潜在的问题:

#!/bin/bash

echo "Hello, World!"

if [[ "$1" == "hello" ]]; then
    echo "You said hello!"
else
    echo "You didn't say hello."
fi

注意这里我们使用了 [[ ... ]] 代替 [ ... ],这是因为 [[ ... ]] 提供了更多的功能和更好的可读性,并且它处理字符串比较时不需要双引号。

再次运行 ShellCheck

修改脚本后,再次运行 ShellCheck 来确认是否解决了所有的问题:

shellcheck example.sh

1. Shell 脚本最佳实践

主题概述

编写高质量的 shell 脚本涉及到遵循良好的编程习惯和最佳实践。这包括代码的组织、错误处理以及可读性和可维护性的提升。

案例与说明

假设我们要写一个简单的脚本来备份一个目录,并压缩为 tar.gz 文件。

#!/bin/bash

# 设置备份目录和文件名
BACKUP_DIR="/path/to/backup"
SOURCE_DIR="/path/to/source"
TODAY=$(date +%Y-%m-%d)
FILENAME="backup-${TODAY}.tar.gz"

# 检查备份目录是否存在
if [ ! -d "$BACKUP_DIR" ]; then
    echo "Backup directory does not exist. Creating it..."
    mkdir -p "$BACKUP_DIR"
fi

# 创建备份文件
tar -czf "${BACKUP_DIR}/${FILENAME}" "$SOURCE_DIR"

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "Backup created successfully."
else
    echo "Backup failed."
fi

说明:

  • 函数和模块化: 使用函数可以将复杂的脚本分解为可重用的部分。
  • 清晰的注释: 每一部分都有注释来解释其目的。
  • 错误处理: 使用条件语句来检查目录是否存在,并报告备份的结果。
  • 变量命名: 使用有意义的变量名,如 BACKUP_DIR 和 SOURCE_DIR

2. Shell 脚本调试技巧

#!/bin/bash

set -x  # 开启调试模式

# 创建一个不存在的文件
touch /tmp/noexist.txt

# 读取文件内容
cat /tmp/noexist.txt

set -x、bash -n、bash -c、bash -i、说明:

  • 使用 set -x 进行调试: 显示每一条命令的执行情况。
  • 使用 bash -n 检查语法错误: 在执行前检查语法。
  • 使用 bash -c 运行单行命令: 测试特定的命令或表达式。
  • 使用 bash -i 进入交互式 shell: 用于调试和测试命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingyu飞鸟

醒来觉得甚是爱你。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值