【问题标题】:Writing shell scripts using pipes使用管道编写 shell 脚本
【发布时间】:2018-03-28 13:14:27
【问题描述】:

我有兴趣编写一个 shell 脚本,它会通过使用 MD5 校验和算法告诉我文件是否已被更改或更改。

我正在使用以下行或代码,但不太了解示例中如何使用管道。我相信这是将一个文件与另一个保存的文件进行比较,但是会喜欢任何形式的解释,说明如何使用 cut 和 tee 命令。提前致谢!

md5=`md5sum ${FILE} | cut -d" " -f1 | tee "${SAVEDIR}/${FILE}.md5"` 

【问题讨论】:

  • 抱歉,您要实现什么功能?据我了解,它只是md5 文件,获取不带文件名的校验和,并将其保存到filevariable。没什么特别的。正如你所说,没有可比性

标签: shell pipe md5 cut tee


【解决方案1】:

此代码只是执行以下操作的一种方法:

  • 通过 md5sum 获取变量中给定文件的 md5 校验和并将其通过管道传送到
  • cut 获取提交给它的字符串的第一行并读取它,直到出现空格。然后它通过管道传递给
  • tee 简单地将字符串放入给定的文件夹和文件。

请查看所有命令/程序的手册页,因为其中包含了解其行为所需的所有信息

【讨论】:

    【解决方案2】:

    首先我想更改您的以下命令:-

    md5=`md5sum ${FILE} | cut -d" " -f1 | tee "${SAVEDIR}/${FILE}.md5"` 
    

    md5=$(md5sum ${FILE} | cut -d" " -f1 | tee "${SAVEDIR}/${FILE}.md5") 
    

    因为现在第一个被认为是旧的。

    现在关于|,在 Unix/Linux 环境中,我们使用该指令将一个命令的输出重定向到另一个命令。最左边的命令总是优先执行。

    现在看下面,这里总共有 3 个命令

    要执行的第一个命令是

     md5=`md5sum ${FILE}
    

    一旦上面的命令执行,它的输出将被重定向到下面的命令

     cut -d" " -f1 'output from  md5=`md5sum ${FILE}'
    

    所以在上面的cut 命令将处理第一个命令的输出。

    现在cut -d" " -f1 'output from md5=md5sum ${FILE}' 的最终输出将被重定向/馈送到命令tee "${SAVEDIR}/${FILE}.md5"),这将生成最终输出,该输出将存储在变量md5

    希望这会对你有所帮助。

    【讨论】: