Shell 脚本和 md5/md5sum 命令 : need to decide when to use which one

标签 shell scripting

第一次发帖,请对我宽容一些。 :)

很确定在研究这个问题时还没有人问过这个问题。

简短版本:如何告诉 shell 脚本使用一个命令而不是另一个命令,具体取决于我在哪个机器上运行 shell 脚本?示例:在框 1 上,我想运行 md5 file.txt。在 Box 3 上,我想运行 md5sum file.txt。我认为这是一个 IF 命令,如果 md5 的输出失败,请改用 md5sum 。只是不知道如何检查md5的输出是否失败


长版:我使用了 3 个盒子。盒子 1 和 3 是来自盒子 2 的文件的接收者,当我在盒子 1/3 上调用脚本时,它们会接收该文件,如下所示:ftpget.sh file.txt

我有一个 shell 脚本,它执行 FTP GET 操作并从 Box 2 中获取文件。然后,它对 Box 2 中的源文件和目标文件执行 md5,目标文件将位于 Box 1 或 3 上,具体取决于我从哪一个执行了脚本。当然,哈希值必须匹配。

问题是这样的:代码编写为使用md5,而Box 1使用md5,而Box 3使用md5sum。因此,当我执行 Box 1 中的脚本时,效果非常好。当我从 Box 3 执行脚本时,它失败了,因为 Box 3 使用 md5sum,而不是 md5。

所以我在想:处理这个问题的最佳方法是什么?我无法安装任何东西,因为我不是管理员,而且管理机器的人可能也不会为我做这件事。我可以在我的 .profile 中创建一个类似于:alias md5="md5sum" 的别名吗?这样,当脚本在 Box 3 上运行时,它将执行 md5 file.txt,但系统将真正执行 md5sum file.txt,因为我创建了别名。

想法?更好的想法? :)

最佳答案

我不知道你用的是什么 shell 。这是针对 bash 的:

#!/bin/sh
md5=$(which md5)
if [ ! "${md5}" ] ; then
  md5=$(which md5sum)
  if [ ! "${md5}" ] ; then
    echo "neither md5 nor md5sum found"
    exit 1
  fi
fi
${md5} $0

关于Shell 脚本和 md5/md5sum 命令 : need to decide when to use which one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115504/

相关文章:

linux - 如何放置我的脚本输出的特定路径?

linux - 当 bash 脚本以 .运算符(operator)?

python - 在 Python 中退出到命令行

javascript - 如何向现有的 JavaScript 函数添加键盘快捷键?

c# - 从托管代码调用 SHCreateItemFromParsingName 时是否需要释放资源?

linux - Apache - 排除本地网络以重定向 HTTPS

linux - 如何在 bash 中连接两个字符串作为文件名?

shell - Unix shell : replace by dictionary

linux - 使用交叉淡入淡出和纯剪切将视频与 ffmpeg 组合

Bash/C shell : Are there any drawbacks about escaping all characters of a file path?