Analisando um arquivo para determinar quais valores usar [duplicado]

0

Eu tenho um script e um arquivo "config" que extrai as variáveis. Eu criei o arquivo de configuração chamado config.cfg e usei no meu script como tal:

#! /bin/bash

if [ -f ./config.cfg ]
   then 
       source ./config.cfg
   else
       exit

Os arquivos de configuração contêm várias coisas diferentes, como

title="Foo Bar - The Untold Story"
desc="This is a verbose description of Foo Bar's Untold Story"
author="S. Nafu"
date="01/01/1932"
image_url="./path_to_image/foo.bar.jpg"
image_link="http://www.foo.bar/foo_bar"

Até agora, o eveything funciona porque eu posso emitir (no script) o comando:

echo $title

e obtenha

Foo Bar - The Untold Story

O que estou tentando realizar

Eu quero criar um arquivo XML com base nesses campos e atributos. O ideal é analisar o arquivo e determinar se a variável foi declarada, não se tiver um valor ou não. Então ... aqui está o código que eu criei:

function writeln 
{
   local attrib=$1
   local value=$2
   local fmt="%s%s%s\n" 
   printf $fmt "<$attrib>$value</$attrib>"
}

function writeChannel
{
    local fmt="%s\n"
    printf $fmt "<channel>"
    while read line
    do
        local xml_attrib='echo $line | cut -d "=" -f1'
        local xml_value='echo $line | tr -d '"' | cut -d "=" -f2'
        writeln $xml_attrib $xml_value

    done < config.cfg

}

Quando executo o código, recebo o que é esperado:

<title>Foo Bar - the Untold Story</title>
<desc>This is a verbose description of Foo Bar's Untold Story</desc>
....

Agora, o que eu gostaria de fazer é usar a variável "title" com base no que eu analisei (presumo que não sei se o nome da variável é "title")

Basicamente, eu quero pegar a variável xml_attrib , concatenar um "$" para ela e então pegar o conteúdo. Então, usando a primeira linha do meu arquivo config.cfg ,

xml_attrib = "title"

Como eu endereçaria essa string como um var e diga

echo $title

Alguma idéia?

    
por Allan 31.08.2015 / 04:36

1 resposta

1

No bash você pode fazer indiretamente uma variável com a sintaxe %código%. Por exemplo,

 a=x; b=a; echo "${!b}"  # gives you x

Outras bash-isms que você pode gostar podem substituir, por exemplo:

xml_attrib='echo $line | cut -d "=" -f1'
xml_value='echo $line | tr -d '"' | cut -d "=" -f2'

por

xml_attrib=${line%%=*}
line=${line#*=}
xml_value=${line//\"/}

Veja bash (1), Expansão de Parâmetros.

    
por 31.08.2015 / 09:57

Tags