Bash: Como obter um valor de uma matriz para criar um comando a partir dele

1

É possível usar o bash para buscar uma string de uma matriz fornecida na seguinte sintaxe dentro de um arquivo de configuração?

|        | Version | PackageManager | Webserver | Database |
|--------|---------|----------------|-----------|----------|
| Centos | 7       | yum            | httpd     | mariadb  |
| Ubuntu | 14.04   | apt-get        | apache    | mysql    |

" Precise ":
De dentro de um script bash (bootstrap.sh) eu quero ser capaz de escrever uma única linha para instalar um pacote como "./install.sh -webserver" para instalar o httpd ou o apache, dependendo do sistema operacional do servidor.

Requisitos :
- De dentro de bootstrap.sh eu simplesmente chamo ./install.sh -webserver "que contém a lógica para verificar qual é o sistema operacional atual do servidor e se o sistema operacional do servidor é suportado
- verifique o que deve ser instalado (-webserver)
- procura transformar a tabela para escolher o gerenciador de pacotes e o nome do pacote corretos para o sistema operacional relacionado - e retorna o comando necessário (yum install httpd) dentro do bootstrap.sh para instalar o httpd

Eu sei que isso parece estranho, mas você ajuda é muito apprecaited.

    
por frank 26.03.2016 / 10:38

1 resposta

2

Se eu entendi corretamente, você precisa de um comando que tomará um sistema operacional como entrada e retornará o comando de instalação correto lendo a tabela mostrada. Se a sua tabela realmente estiver no formato exibido, incluindo os bonitos para humanos, mas inúteis para máquinas | e - , você pode fazer isso para obter o servidor da Web:

awk -vOS="Centos" '$2==OS{print $6,"install",$8}' table 

E isso para o banco de dados:

awk -vOS="Centos" '$2==OS{print $6,"install",$10}' table 

A saída real seria:

$ awk -vOS="Centos" '$2==OS{print $6,"install",$8}' table 
yum install httpd

$ awk -vOS="Centos" '$2==OS{print $6,"install",$10}' table 
yum install mariadb

$ awk -vOS="Ubuntu" '$2==OS{print $6,"install",$8}' table 
apt-get install apache

$ awk -vOS="Ubuntu" '$2==OS{print $6,"install",$10}' table 
apt-get install mysql

Se a sua tabela estiver em um formato mais simples, como:

         Version  PackageManager  Webserver  Database 
 Centos  7        yum             httpd      mariadb  
 Ubuntu  14.04    apt-get         apache     mysql    

O texto acima seria:

awk -vOS="OS_NAME" '$1==OS{print $3,"install",$4}'
awk -vOS="OS_NAME" '$1==OS{print $3,"install",$5}'

Assim, no seu script, supondo que você tenha o sistema operacional salvo como $os e a opção passada ( webserver ou database ) como $option , você pode fazer:

case $option in
     "webserver")
         commmand=$(awk -vOS="$os" '$2==OS{print $6,"install",$8}' table ) ;;
      "database")
          command=$(awk -vOS="$os" '$2==OS{print $6,"install",$10}' table) ;;
esac
    
por 26.03.2016 / 11:40