BASH 超出我理解的条件

BASH Conditionals Beyond My Understanding

浏览项目 "pageauc/pi-timolo" 我遇到了这个 BASH 脚本:

timoloFiles=("menubox.sh" "pi-timolo.py" "pi-timolo.sh")

for fname in "${timoloFiles[@]}" ; do
    wget_output=$(wget -O $fname -q --show-progress https://raw.github.com/pageauc/pi-timolo/master/source/$fname)
    if [ $? -ne 0 ]; then
        wget_output=$(wget -O $fname -q https://raw.github.com/pageauc/pi-timolo/master/source/$fname)
        if [ $? -ne 0 ]; then
            echo "ERROR : $fname wget Download Failed. Possible Cause Internet Problem."
        else
            wget -O $fname https://raw.github.com/pageauc/pi-timolo/master/source/$fname
        fi
    fi
done

我知道这是循环遍历文件并使用 WGET 下载它们,但我不明白为什么根据先前命令的退出状态,它似乎将每个文件下载多达 3 次。这是怎么回事?

if 条件正在检查上一个命令的退出代码。所以第一个 if 是检查第一个 wget 退出代码是否不等于 0(成功)。如果它不是零,它将重试。它不会下载文件三次。

而且每个 wget 都有点不同。即首先包含 --show-progress 标志,第二个包含 -q (配额)。

这是重试的基本实现,可能是为了解决某些情况?

我是作者,代码只是为了允许不同版本的 wget。较新的支持 show progress 和 -q 但较早的版本不支持,因此我捕获错误并尝试更早但更冗长的语法。克劳德..