Como verificar se dois ou mais programas são instalados usando um script bash? -- and-line campo com bash campo com scripts camp askubuntu Relacionado O problema

How to check if two or more programs are installed using a bash script?


5
vote

problema

português

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 vários programas instalados em um sistema. Como posso fazer isso?

english

I want to check whether two or more programs are installed using a bash script:

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

The above script works for a single program and I want to check for multiple programs installed in a system. How can I do that?

        
         
         

Lista de respostas

7
 
vote
vote
Melhor resposta
 

Se você quiser verificar que todos os deles estão instalados, basta fazer:

  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 imprime a saída de hash . Você provavelmente só precisa 2> desde que eu sei, hash apenas imprime para stderr, mas também podemos estar no lado seguro.

O && significa que o próximo comando só será executado se o anterior foi bem sucedido. O ABCDEFGHIJKLMNABCDEFGHIJKLMN7 significa que o próximo comando só será executado se o anterior falhou. Então, se um dos três (ou n) programas que você verificou não estiver instalado, você receberá a mensagem de erro.

Se você quiser ser informado 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     

Finalmente, para ainda mais controle gracioso e saída detalhada, você poderia fazer:

  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. "  "$i" "${#progs[@]}"  printf "%d of %d programs were missing " "$n" "${#progs[@]}"    
 

If you want to check that all of them are installed, just do:

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

The &> redirects standard error and standard output to /dev/null so you don't print the output of hash. You probably only need 2> since as far as I know, hash only prints to stderr, but we may as well be on the safe side.

The && means that the next command will only be run if the previous one was successful. The || means the next command will only be run if the previous one failed. So, if one of the three (or N) programs you checked for is not installed, you will get the error message.

If you want to be told which program is not installed, use this one instead:

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

Finally, for even more fine grained control and detailed output, you could do:

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[@]}" 
 
 
   
   

Perguntas relacionadas

22  Bash Script não executando de Crontab [Duplicate]  ( Bash script not executing from crontab ) 
. Esta pergunta já tem respostas aqui : Por que os scripts crontab não estão funcionando? ...

0  Script Shell para instalar o software e configurar a rede  ( Shell script to install software configure network ) 
Ei, eu queria saber, como, depois de uma nova instalação do Ubuntu, eu posso instalar todos os softwares essenciais (VLC, Apache, MySQL, PHP, Java, NetBeanSet...

9  Como desligar o Ubuntu depois (2 horas) de ocioso?  ( How to shutdown ubuntu after 2 hours of idle ) 
em execução: xubuntu 14.04 32bit. Eu li vários desatualizados, não trabalhando, trabalhando diferente que quero respostas aqui e em outro lugar. Eu tinha um...

2  Abra a pasta pai de um link simbólico por clique com o botão direito do mouse?  ( Open the parent folder of a symbolic link via right click ) 
Podemos abrir uma pasta pai de qualquer arquivo usando o script nautilus como #!/bin/bash nautilus "$1" Se eu fizer este script no link simbólico que...

3  dpkg sem shell  ( Dpkg with no shell ) 
Como executar o dpkg sem shell? Aqui está o meu problema: Eu furo e script autorun.sh na minha chave USB. Para executar este script, criei regras em /e...

0  Estágios diferentes no Bash Programming  ( Different stages in bash programming ) 
Eu tenho um programa bash com diferentes estágios como: $stage=1 if [ stage -le 1]; then echo "execute stage 1" fi if [ stage -le 2]; then echo "execute s...

135  Como executar um script apenas clicando duas vezes como arquivos .exe no Windows?  ( How to execute a script just by double clicking like exe files in windows ) 
Como posso fazer um executável de script bash clicando duas vezes como .exe arquivos no Windows? Eu tentei Criando um lançador e atribuir o script a ele , ...

6  Minha função de bash é executada apenas uma vez por terminal aberta  ( My bash function runs only once per terminal opened ) 
Quando eu tento executar minha função bash, definida em .bashrc, por uma segunda vez no mesmo terminal, ela não funciona. O código é o seguinte: lspci6 ...

2  Como monitorar um arquivo local para alterações, aplique um regex Substituir e salve / sobrescreva em um arquivo de destino?  ( How to monitor a local file for changes apply a regex replace on it and save ov ) 
Eu gostaria de iniciar um script ou algo que assiste a um arquivo de texto para alterações. Quando o arquivo é alterado, eu quero executá-lo através de um ana...

11  Execute scripts automaticamente no servidor após conexão SSH  ( Run scripts automatically in server after ssh connection ) 
Como executar um script automaticamente no servidor em breve após o sistema do cliente, estabeleça conexão SSH com o servidor para ex: Suponha que um usuári...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.