我想编写一个 bash 脚本,仅当已安装的版本不是 1.0 时才从 .deb 文件下载并安装 BleachBit。我使用的是 Ubuntu 12.04,而 Bleachbit 在官方存储库中只有 0.9 版本,我找不到适用于 Ubuntu Precise 的 1.0 版本的 PPA。我该怎么做?
答案1
这是您的脚本的一个更简单版本,(保持幽默感:)):
#!/bin/bash
## The && means that the script will run the next command only if this one
## succeeds, in other words, only if the string `version 1.0` is found.
bleachbit --version | grep -q 'version 1.0' &&
echo "$(tput setaf 2)The elves have verified the BleachBit version.$(tput sgr0)" &&
exit 0
## This block will only be executed if the grep above failed
wget -P ~/Downloads http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb &&
sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204.deb &&
echo "$(tput setaf 2)The elves have installed BleachBit 1.0.$(tput sgr0)"
请注意,我&&
在每个命令的末尾添加了,这样,如果任何命令失败,您将避免错误,因为脚本将在第一个失败的命令时退出。
更安全的方法是将第一个命令更改为:
bleachbit --version | awk '/version/{if($NF>=1){exit 0}else{exit 1}}'
这样做的好处是,当版本号大于时,它将在未来版本中正常工作1
。$NF
inawk
表示最后一个字段,/version/
表示脚本将在与 匹配的行上运行version
。因此,由于第一行是:
info: starting BleachBit version 1.0
awk
将测试此处的最后一个字段(1.0
)是否大于或等于一,并将以0
状态(成功)退出,如果是,则意味着&&
将执行下一个块(),并且脚本将停止。
您还可以将整个内容浓缩为:
bleachbit --version | head -n 1 | awk '{if($NF>=1){exit 1}else{exit 0}}' &&
wget -P ~/Downloads http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb &&
sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204
但这是以牺牲可怜的精灵为代价的。
答案2
我把这个简短的脚本放在一起,它似乎对我有用!这还包括一些我自己的精灵式幽默。我正在一个更大的脚本中使用此代码,这样我就可以将此条件复制并粘贴到我需要的任何地方。
/bin/bash #!/bin/bash # 检查 BleachBit 版本,如有必要则安装 如果 [ "$(bleachbit --version | grep -c 'version 1.0')" = "0" ]; 然后 wget -P ~/下载 http://katana.oooninja.com/bleachbit/sf/bleachbit_1.0_all_ubuntu1204.deb sudo dpkg -i ~/Downloads/bleachbit_1.0_all_ubuntu1204.deb echo "$(tput setaf 2)精灵已安装BleachBit 1.0.$(tput sgr0)" 别的 echo "$(tput setaf 2)精灵已验证BleachBit版本。$(tput sgr0)" 菲