Como verificar se dois ou mais programas estão instalados usando um script bash?

3

Eu quero verificar se dois ou mais programas estão instalados usando um script bash:

hash foo &> /dev/null
if [ $? -eq 1 ]; then
    echo >&2 "foo not found."
else
    echo "foo found"
fi

O script acima funciona para um único programa e eu quero verificar se há vários programas instalados em um sistema. Como posso fazer isso?

    
por potholiday 13.06.2015 / 18:01

1 resposta

6

Se você quiser verificar se todos deles estão instalados, faça o seguinte:

hash foo bar baz &>/dev/null && 
    echo "All programs installed" ||
    echo "At least one program is missing"

O &> redireciona o erro padrão e a saída padrão para /dev/null , para que você não imprima a saída de hash . Você provavelmente só precisa de 2> , já que, até onde eu sei, hash só imprime para stderr, mas também podemos estar no lado seguro.

O && significa que o próximo comando só será executado se o anterior tiver sido bem-sucedido. O || significa que o próximo comando só será executado se o anterior falhar. Portanto, se um dos três (ou N) programas que você verificou não estiver instalado, você receberá a mensagem de erro.

Se você deseja saber qual programa não está instalado, use este:

for p in foo bar baz; do 
    hash "$p" &>/dev/null && echo "$p is installed" ||
                 echo "$p is not installed"
done 

Por fim, para um controle ainda mais refinado e uma saída detalhada, você pode:

i=0; n=0; progs=(foo bar baz);
for p in "${progs[@]}"; do
    if hash "$p" &>/dev/null
    then
        echo "$p is installed"
        let c++
    else
        echo "$p is not installed"
        let n++
    fi
done
printf "%d of %d programs were installed.\n"  "$i" "${#progs[@]}" 
printf "%d of %d programs were missing\n" "$n" "${#progs[@]}"
    
por terdon 13.06.2015 / 18:48