leia o arquivo e atribua os valores a outro arquivo

1

Eu quero ler o arquivo e atribuir os valores às variáveis que estão em outro arquivo usando o shell script.

Por exemplo eu tenho arquivo como "myconf"

cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"
user="rhqadmin"
passwd="janre"
file1="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid.js"
file2="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid"
file3="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid.js"
file4="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid"
file5="/opt/Solartis_Monitoring/JON_CLI/samples/alertid"

e meu script em outro arquivo como "testconf"

$cli -u $user -p $passwd -s $host -f $file3 > $file4

Eu quero pegar os valores para as variáveis (cli, user etc) do arquivo "myconf". Usado enquanto loop para ler os valores, ele tem atribuído a linha inteira ( cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh" ) para $ cli. Precisa atribuir apenas os valores após o separador de campo (=) para minha variável

Exemplo:

echo $cli deve imprimir /opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh não como cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"

Eu não consigo alterar o arquivo "myconf" que é pré-definido. Por favor ajude nesta

    
por karthik 30.06.2016 / 07:45

1 resposta

4

A abordagem cuidadosa

Tente:

while IFS== read -r var value
do
    value="${value#\"}"
    [ "$var" ] && declare "$var=${value%\"}"
done <myconf
echo "$cli"

Isso produz a saída:

/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh

Como funciona

  • while IFS== read -r var value; do

    Isso inicia um loop. Ele temporariamente define o separador de campo, IFS , como um sinal de igual, = . Em seguida, ele lê uma linha e separa a linha nas duas variáveis var e value . var é atribuído ao que quer que seja antes do primeiro = e value obter o que quer que seja após o primeiro = .

  • value="${value#\"}"

    Isso remove o primeiro " do valor.

  • [ "$var" ] && declare "$var=${value%\"}"

    Se var não estiver vazio, em outras palavras, se não tivermos lido uma linha vazia, atribua a variável $var ao valor ${value%\"}" , em que ${value%\"}" removerá o% final" de $value .

  • done <myconf

    Isso sinaliza o final do loop e define a entrada dos loops do arquivo myconf .

A abordagem de confiança

Isso origina o arquivo myconf :

. myconf
echo "$cli"

Isso produz a saída:

/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh

Como essa abordagem executa o arquivo myconf , é necessário que você confie em quem criou myconf . Se o arquivo myconf contiver algum caractere ativo no shell, os resultados podem não ser o que você deseja.

    
por 30.06.2016 / 08:03