Como posso escrever um script para instalar o BleachBit apenas se a versão instalada não for uma determinada versão?

2

Eu quero escrever um script bash para baixar e instalar o BleachBit de um arquivo .deb somente se a versão já instalada não for 1.0. Eu estou usando o Ubuntu 12.04 e Bleachbit é apenas a versão 0.9 nos repositórios oficiais e não consigo encontrar um PPA com a versão 1.0 para o Ubuntu Precise. Como posso fazer isso?

    
por HarlemSquirrel 26.03.2014 / 17:03

2 respostas

2

Aqui está uma versão mais simples do seu script, (mantendo o humor intacto :)):

#!/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)" 

Observe que eu adicionei && ao final de cada comando, assim, você evitará erros se algum dos comandos falhar, pois o script sairá no primeiro comando com falha.

Uma abordagem mais segura seria alterar o primeiro comando para:

bleachbit --version | awk '/version/{if($NF>=1){exit 0}else{exit 1}}' 

Isso tem a vantagem de funcionar bem para versões futuras, quando o número da versão for maior que 1 . O $NF em awk significa o último campo e /version/ significa que o script será executado em linhas correspondentes a version . Então, como a primeira linha é:

info: starting BleachBit version 1.0

awk testará se o último campo ( 1.0 ) aqui é maior ou igual a um e sairá com um 0 status (sucesso), se for o que significa que o próximo bloco ( && ) será executado e seu script será interrompido.

Você também pode condensar tudo para:

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

Mas isso vem às custas dos pobres elfos.

    
por terdon 26.03.2014 / 18:27
1

Eu coloquei este pequeno roteiro em conjunto que parece funcionar para mim! Isso também inclui um pouco da minha própria marca de humor élfico. Eu estou usando este código em um script maior para que eu possa copiar e colar este condicional em qualquer lugar que eu precise.

#!/bin/bash

# Check BleachBit Version and install if necessary
if [ "$(bleachbit --version | grep -c 'version 1.0')" = "0" ];
    then 
        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)"
    else
        echo "$(tput setaf 2)The elves have verified the BleachBit version.$(tput sgr0)"
fi
    
por HarlemSquirrel 26.03.2014 / 17:03