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 的。
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,脸书。如果是其他号码,请谷歌。如果不是数字,推特。
试图从这样的抽象问题中推断出你想要的东西有点奇怪,但这对我来说最有意义。