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

pot*_*day 3 command-line bash programming

我已经编写了一些用于下载收藏夹图标的代码。它有一个我看不到的逻辑错误。

#!/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
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*Oli 9

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
Run Code Online (Sandbox Code Playgroud)

仔细想想,你可能想要这样的东西:

#!/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
Run Code Online (Sandbox Code Playgroud)

它首先检查输入是数字。如果是并且是 1,则 cnet. 如果是 2,脸书。如果是其他号码,请谷歌。如果不是数字,推特。

试图从这样的抽象问题中推断出你想要的东西有点奇怪,但这对我来说最有意义。

  • 因此,再次更改它以执行您想要的操作。你没有准确解释你想要什么,所以我只是提供一个例子。 (2认同)