gpt4 book ai didi

linux - 具有 OR 逻辑语法的 bash IF 条件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:53 31 4
gpt4 key购买 nike

我很困惑..

我只是如果文件不存在或者 md5 和是错误的

像这样

md5=20ffa23fbb589484d03d79608fe8d2ad
if ! -f /tmp/1.txt || echo -n ${md5} /tmp/1.txt | md5sum --status --check -
then
....
fi

如何写出有效的语法?

最佳答案

if 条件中的内容是命令(如 echo ... | md5sum ...),而不是条件表达式(如 -f/tmp/1.txt).为了使用条件表达式,你需要使用test命令:

if ! test -f /tmp/1.txt  || echo -n ${md5} /tmp/1.txt | md5sum --status --check -

或其同义词 [(请注意,它需要一个“]”作为它的最后一个参数,所以它看起来像有趣的括号):

if ! [ -f /tmp/1.txt ]  || echo -n ${md5} /tmp/1.txt | md5sum --status --check -

或者在 bash 或 zsh 中,您可以使用 [[ ]](这不是常规命令,并且对于更复杂的条件具有更简洁的语法):

if ! [[ -f /tmp/1.txt ]]  || echo -n ${md5} /tmp/1.txt | md5sum --status --check -

顺便说一句,我很确定你也想否定 md5 状态检查,所以你还需要另一个“!”来否定它:

if ! [[ -f /tmp/1.txt ]]  || ! echo -n ${md5} /tmp/1.txt | md5sum --status --check -

编辑:我还建议跳过 echo 上的 -n 选项——它似乎没有必要,而且不可移植。所以某些版本的 echo 只会打印“-n”作为其输出的一部分,这会混淆 md5sum。我有一堆使用 echo -n 的脚本,并且在系统更新改变了 echo 的行为后不得不在 panic 中重写它们......所以从那时起我像躲避瘟疫一样避开它,并在需要时使用 printf

关于linux - 具有 OR 逻辑语法的 bash IF 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55790408/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com