Progresso do Script Bash

1

Estou formando uma nova pergunta baseada em uma postagem anterior que publiquei aqui em relação a um script BASH que estou escrevendo. Esta é apenas uma função do script, mas eu comecei aqui porque percebi que teria mais sucesso em completar essa função do que em outras pessoas.

O código que tenho até agora é:

#!/bin/bash
clear;
welcome="- Sudo Bypass Package Installer -";
echo $welcome;
pkgFetch() {
    echo -n "Name of package you would like to install: "; read pkg
    chkPkg=$(dpkg -s $pkg|grep installed); echo "The Package [$pkg] is already installed."
if [ "" == "$chkPkg" ]; then
    echo  "The Package [$pkg] is installing..."
    sudo apt-get install $pkg -qq
    echo  "The package [$pkg] was successfully installed."
fi
echo  -n "Press ENTER to return to command-line."
};
pkgFetch;
read;
clear;

A primeira parte, que verifica se o pacote está instalado (se for o script, retorna a mensagem informando que já está instalado) parece estar funcionando corretamente. No entanto, encontro aqui algumas coisas das quais não consigo entender ... principalmente porque sou um novato.

  • Se [$ pkg] não estiver instalado, o script ainda exibirá a mensagem dizendo que está, seguido pela mensagem que deve ser exibida, se não estiver instalada, que está sendo instalada no momento.
  • O script não instala silenciosamente o pacote. Isso mostra que é lendo o banco de dados , descompactando $ pkg , acionando o processamento e configurando < strong> $ pkg . Depois, o script exibe a mensagem correta de que "O pacote [$ pkg] foi instalado com êxito".

Alguém quer dar uma olhada nisso aqui e me ensinar sobre meus erros?

Agradecemos antecipadamente: -)

    
por Kevin Wyman 28.10.2012 / 02:46

1 resposta

2

a mensagem dizendo que o pacote já está instalado é completamente incondicional, é exibido se o grep retorna bem ou mal.

Você poderia prefixar com [ -n "$chkPkg" ] && para torná-lo condicional (em uma variável não vazia chkPkg), ou melhor ainda, puxá-lo para o bloco if assim:

if [ "" == "$chkPkg" ]; then
  echo  "The Package [$pkg] is installing..."
  # ...
else
  echo "The Package [$pkg] is already installed."
fi

BTW. Você deve combinar variáveis em shellscript com um único =, não com ==. O último não está em conformidade com o posix e não será executado em alguns shells unix além do bash. Tais coisas são chamadas de "bashisms", evite-as onde não incomodar muito você.

    
por Paul Hänsch 28.10.2012 / 10:06