这段代码的逻辑错误是什么?

这段代码的逻辑错误是什么?

我写了一些用于下载图标的代码。它有一个逻辑错误,但我没发现。

#!/bin/bash
ico="1";
if [[ $ico =~ ^-?[0-9]+$ ]]; then
wget -P $HOME/Downloads/ http://www.google.com/favicon.ico
elif [[ $ico -eq 1 ]]; then 
wget -P $HOME/Downloads/ http://www.cnet.com/favicon.ico
elif [[ $ico -eq 3 ]]; then
wget -P $HOME/Downloads/ https://www.facebook.com/favicon.ico
else
wget -P $HOME/Downloads/ https://www.twitter.com/favicon.ico
fi

根据我的逻辑,当变量ico为时1,它应该从 Google 和 CNet 下载图标,因为它满足两个条件(它是一个整数,它的值为 1)。但是,它只下载 Google 的图标,而不是 CNet 的。

答案1

if.. elif..else只会触发子句。elif是“else if”的缩写,因此,像一样else,依赖于先前的检查不激活。

如果要分别评估每个条件,以便可以调用多个条件,则每个条件都需要有自己的条件if。我们还可以取消else(将始终调用):

#!/bin/bash
ico="1";

if [[ $ico =~ ^-?[0-9]+$ ]]; then
    wget -P $HOME/Downloads/ http://www.google.com/favicon.ico
fi

if [[ $ico -eq 1 ]]; then 
    wget -P $HOME/Downloads/ http://www.cnet.com/favicon.ico
fi

if [[ $ico -eq 3 ]]; then
    wget -P $HOME/Downloads/ https://www.facebook.com/favicon.ico
fi

wget -P $HOME/Downloads/ https://www.twitter.com/favicon.ico

经过思考,你可能会想要这样的东西:

#!/bin/bash
ico="1";

if [[ $ico =~ ^-?[0-9]+$ ]]; then
    if [[ $ico -eq 1 ]]; then 
        wget -P $HOME/Downloads/ http://www.cnet.com/favicon.ico
    elif [[ $ico -eq 3 ]]; then
        wget -P $HOME/Downloads/ https://www.facebook.com/favicon.ico
    else
        wget -P $HOME/Downloads/ http://www.google.com/favicon.ico
    fi
else
    wget -P $HOME/Downloads/ https://www.twitter.com/favicon.ico
fi

它首先检查输入是否为数字。如果是数字并且为 1,则为 cnet。如果是 2,则为 facebook。如果是其他数字,则为 google。如果不是数字,则为 twitter。

尝试从这样一个抽象的问题中推断出你想要什么有点奇怪,但这对我来说最有意义。

相关内容