随机
Enter 搜索 ↑↓ 切换 Esc 清空

hash_verify

脚本

校验哈希值 md5/sha256

一键脚本

bash <(curl -sL gitee.com/meimolihan/cmdbox/raw/master/sh/hash_verify.sh) /路径/文件 64位sha256哈希值
bash <(curl -sL ../sh/hash_verify.sh) /路径/文件 64位sha256哈希值

效果预览

执行脚本效果预览

补充说明

该脚本用于校验文件哈希值是否匹配(md5 / sha256),支持命令行传参和纯交互式两种模式,自动按哈希值长度识别算法,匹配成功或失败均有明确反馈,适合下载完整性验证、文件一致性检查等场景。

功能特点

参数说明

# 指定文件与哈希值(64 位 sha256)
./hash_verify.sh /路径/文件 长度64位的sha256值

# 参数顺序可互换(32 位 md5)
./hash_verify.sh 长度32位的md5值 /路径/文件

# 纯交互式输入
./hash_verify.sh

输出说明

结果 输出
匹配 【sha256/md5】哈希匹配,文件完好
不匹配 【算法】哈希不匹配! 并列出预期 / 当前哈希
长度非法 哈希长度非法!sha256=64位,md5=32位

注意事项

脚本源码

#!/bin/bash

gl_hui='\033[38;5;59m'
gl_hong='\033[38;5;9m'
gl_lv='\033[38;5;10m'
gl_huang='\033[38;5;11m'
gl_lan='\033[38;5;32m'
gl_bai='\033[38;5;15m'
gl_zi='\033[38;5;13m'
gl_bufan='\033[38;5;14m'

log_info() { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok() { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_warn() { echo -e "${gl_huang}[警告]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }

cancel_empty() {
    local menu_name="${1:-上一级选单}"
    echo -e "${gl_hong}空输入,返回 ${gl_huang}${menu_name} ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
    sleep 0.5
    echo -ne "${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
    sleep 0.6
    echo ""
    clear
}

hash_verify() {
    local p1="${1:-}"
    local p2="${2:-}"
    local file=""
    local expect_hash=""
    local algo=""

    if [[ -n "${p1}" && -f "$p1" ]]; then
        file="$p1"
        expect_hash="$p2"
    elif [[ -n "${p2}" && -f "$p2" ]]; then
        file="$p2"
        expect_hash="$p1"
    fi

    if [[ -z "$file" ]]; then
        clear
        echo -e "${gl_zi}>>> 交互式哈希校验 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
        echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
        read -r -e -p "$(echo -e "${gl_bai}请输入文件绝对路径: ")" file
        if [[ -z "$file" ]]; then
            cancel_empty "返回"
            return 1
        fi
        if [[ ! -f "$file" ]]; then
            log_error "文件不存在:$file"
            return 1
        fi
        echo ""
        read -r -e -p "$(echo -e "${gl_bai}请输入预期哈希值: ")" expect_hash
        if [[ -z "$expect_hash" ]]; then
            cancel_empty "返回"
            return 1
        fi
    fi

    local hash_len=${#expect_hash}
    if [[ "$hash_len" -eq 64 ]]; then
        algo="sha256"
    elif [[ "$hash_len" -eq 32 ]]; then
        algo="md5"
    else
        log_error "哈希长度非法!sha256=64位,md5=32位"
        return 1
    fi

    local cur_hash
    case "$algo" in
        sha256)
            cur_hash=$(sha256sum "$file" | awk '{print $1}')
            ;;
        md5)
            cur_hash=$(md5sum "$file" | awk '{print $1}')
            ;;
    esac

    if [[ "$cur_hash" == "$expect_hash" ]]; then
        log_ok "【$algo】哈希匹配,文件完好"
        return 0
    else
        log_error "【$algo】哈希不匹配!"
        echo -e "${gl_bai}  预期: $expect_hash"
        echo -e "${gl_bai}  当前: $cur_hash"
        return 2
    fi
}

hash_verify "$@"

创建本地脚本

new_script="new_test.sh"

cat > "$new_script" << 'EOF'
#!/bin/bash

# 粘贴脚本源码

EOF

# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"

相关命令