我写了一些用于下载图标的代码。它有一个逻辑错误,但我没发现。
#!/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。
尝试从这样一个抽象的问题中推断出你想要什么有点奇怪,但这对我来说最有意义。