You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本识别MD5/SHA系列哈希编码异常问题求助

错误原因梳理
  • 正则表达式语法完全错误:你将行尾匹配符$放到了长度限定符{N}前面,且错误限定了字符范围:
    1. 十六进制哈希值仅包含0-9和a-f(不区分大小写),不需要匹配a-z全字母和=
    2. 长度限定逻辑应该是^[匹配范围]{长度}$,你写的${32}属于完全错误的语法,永远无法匹配到结果
  • 函数内错误使用exit命令:exit会直接终止整个脚本进程,如果你只需要退出函数,应该用return
  • 变量未加引号包裹:未加双引号的$1遇到带空格、特殊字符的输入时会出现解析异常
  • 不必要的输出捕获:可以直接用grep -q静默判断匹配结果,不需要捕获输出再判断变量非空,逻辑更简洁
修复后的完整代码
#!/usr/bin/bash

function identify-hash() {
  local input="$1"
  # 判断MD5(32位)
  if grep -qE -i '^[a-f0-9]{32}$' <<< "$input"; then
    echo "The $input is a valid md5sum string"
    return 0
  # 判断SHA1(40位)
  elif grep -qE -i '^[a-f0-9]{40}$' <<< "$input"; then
    echo "The $input is a valid sha1sum string"
    return 0
  # 判断SHA256(64位)
  elif grep -qE -i '^[a-f0-9]{64}$' <<< "$input"; then
    echo "The $input is a valid sha256sum string"
    return 0
  # 判断SHA512(128位)
  elif grep -qE -i '^[a-f0-9]{128}$' <<< "$input"; then
    echo "The $input is a valid sha512sum string"
    return 0
  else
    echo "Unable to determine the hash function used to generate the input"
    return 1
  fi
}

identify-hash "$1"
使用说明

将脚本保存为hash-identifier.sh,赋予执行权限后直接传入哈希值即可测试:

chmod +x hash-identifier.sh
./hash-identifier.sh d41d8cd98f00b204e9800998ecf8427e

内容的提问来源于stack exchange,提问作者Sin950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:48:03