如何编写脚本以仅在安装的版本不是特定版本时安装 BleachBit?

如何编写脚本以仅在安装的版本不是特定版本时安装 BleachBit?

我想编写一个 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$NFinawk表示最后一个字段,/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)"

相关内容