如何在脚本中添加校验和?

如何在脚本中添加校验和?

我在安装时遇到问题在我的 Linux (debian 8 jessie) 计算机上。我正在阅读安装程序脚本,当我注意到安装脚本中有安装脚本的校验和时?

我在评论中修改了脚本中的 1 个字符,突然间我得到了

“./eagle-lin-7.2.0.run”中的校验和错误

这是如何运作的?在将其放入脚本之前您不需要知道校验和吗?对我来说这似乎是自相矛盾的。有人可以解释一下如何将整个脚本的校验和放入脚本中吗?

这个特定的校验和是 MD5。

答案1

我下载了这个安装程序并看了一眼。以下是相关代码片段:

#!/bin/bash

MD5=1fe8463da9322ad9c966a57b92569a52

# The required tools:
SED=sed
MD5SUM=md5sum
CUT=cut
DATA="$SED -e '1,/^__DATA__$/d' '$0'"

# Check archive integrity:
test `eval $DATA | $MD5SUM | $CUT -d " " -f 1` = $MD5 || {
  echo "Checksum error in '$0'" >&2
  exit 1
  }

# ...

exit 0
# Everything after the next line is a .tar.bz2 file
__DATA__
[a binary blob finishes the file]

sed -e '1,/^__DATA__$/d'在脚本本身上运行,它删除从开头(第 1 行)到该__DATA__行的所有行,只留下二进制文件。然后运行二进制文件md5sum以获取校验和,cut然后将其格式化为仅包含校验和本身(无文件名),然后将其与脚本前面的硬编码校验和进行比较。

当 MD5 匹配时,该test语句返回 true,不匹配时返回 false。意志||短路当测试为真时,意味着它停止评估。仅当测试为 false 时才会运行括号内的节。

由于您可能没有(故意)触摸该__DATA__行之后的任何内容,因此这可能是您的文本编辑器的错误。我怀疑它添加了空格或空行,或者它在 DOS 和 UNIX 行格式之间进行了转换(在维基百科上了解有关换行符的更多信息)。

另一种可能性是下载失败并且文件已损坏。如果这不是问题,只需exit 1从 MD5 测试节中删除该行,安装程序就应该可以正常工作。

(这个脚本写得不好,所以我对你必须修改它才能使其工作一点也不感到惊讶。)

相关内容