Shell Script – Tratamento de querystring como cgi

Postado por Gabriel Verta em 24/03/2009

Como fazemos para pegar os valores de uma querystring rodando um shell script por cgi?

Vamos ao código:


for var in `echo $QUERY_STRING | tr "&" "\t"`
do
key=$(echo $var | tr = " " | awk '{print $1}';);
value=$(echo $var | tr = " " | awk '{print $2}';);
declare "query_$key"="$value";
done

Agora a lógica:

Quando chamamos um script via cgi, este cria a variavel de ambiente QUERY_STRING, que conterá o valor do GET em uma string única. Assim temos que tratar esta string para que tenhamos as variáveis com os valores que enviamos.

Vamos começar com este trecho:

`echo $QUERY_STRING | tr "&" "\t"`

Neste estamos mandando exibir o valor da variável QUERY_STRING e jogando a saida para o comando tr, que faz uma tradução de um texto em outro, transformando todos os & em \t no caso.
E o que é esta ` (crase) antes e depois do comando? Serve para você efetivamente executar um comando do shell, onde o resultado é retornado para o script.

Vamos para a próxima linha do script:

key=$(echo $var | tr = " " | awk '{print $1}';);

A partir desta linha, dentro do for, já temos a variavel var com o valor parametro=valor, então temos que pegar este parametro e valor. Exibimos o valor de var, jogando a saída padrão para o tr novamente, só que agora transformamos = em espaço, para aí jogarmos esta saída em outro programa para separar os argumentos, no caso o awk, onde mandamos exibir somente o primeiro parâmetro, rodando direto no shell seria algo como:


$ awk '{print $1}';
parametro valor
parametro

Digitando parametro e valor no awk e mandando exibir apenas o primeiro parâmetro ele retorna somente o primeiro.

Na linha seguinte do nosso script, a mesma coisa é feita, com a diferença de que o segundo parâmetro é pego para termos o valor e não a chave desta vez.

Agora já temos key com a chave do parâmetro do GET, e value com o valor da chave. Vamos a próxima linha:

declare "query_$key"="$value";

Agora estamos criando a variável com o valor de key com o valor de value. Como assim?

Se no GET tivessemos algo como stiod=nozes, $key teria o valor de stiod e $value o valor nozes. Então estariamos criando uma variável stiod com o valor nozes. Seria algo como se estivessemos digitado stiod=nozes no código. Ou seja, a partir deste momento, com o fim do for, temos uma variável com cada chave do GET com o prefixo "query_", e seus respectivos valores.

Seguindo o exemplo anterior, se tivessemos passado arquivo.sh?stiod=nozes, mandando exibir o valor da variável query_stiod seria exibido o valor nozes (echo $query_stiod)

É isso ai,
;)

Trackback URI | RSS dos comentários

Deixe um comentário

Av. Conselheiro Nébias, 368A, Cj. 413
Vila Mathias - Santos - SP
Telefone: (13) 3345-4580

© 2008 - 2009 Stiod. Todos os direitos reservados.