Tratando Variáveis no Shell?! [RESOLVIDO]

1. Tratando Variáveis no Shell?! [RESOLVIDO]

Carlos Eduardo
cebaldocchi

(usa Ubuntu)

Enviado em 21/03/2016 - 19:18h

Boa tarde Pessoal,
tudo bem?

Estou fazendo um programa em Shell Script e estou com um problema... desejo pegar 3 arquivos e juntar todos em um só.
Estou usando o comando CAT para fazer isso, mas estou com um problema pois desejo rodar esse "CAT" 50 vezes usando um loop for... porém não consigo usar o "incremento" do for pra fazer isso!

Quero que o sistema leia a linha e interprete as variáveis para fazer a expressão:

for i in $(seq 1 1 50)
do
cat $smhead split$i $smtail > $nome_sitemap$i
done



Eu consigo fazer o for de 1 até 50 com incremento unitário.
Os arquivos: $smhead e $smtail são "estáticos", ou seja, o nome deles é sempre o mesmo...
O problema está nos arquivos: split$i e $nome_sitemap$i - eu desejo que o shell script leia a variável em 2 partes:

split$i deverá ser lido como:
split1
split2
split3
...

$nome_sitemap$i deverá ser lido como:
sitemap1
sitemap2
sitemap3
...
(onde sitemap vem da primeira variável... e o número "1" vem da segunda variável.


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/03/2016 - 19:38h

cebaldocchi escreveu:

Boa tarde Pessoal,
tudo bem?
Estou fazendo um programa em Shell Script e estou com um problema... desejo pegar 3 arquivos e juntar todos em um só.
Estou usando o comando CAT para fazer isso, mas estou com um problema pois desejo rodar esse "CAT" 50 vezes usando um loop for... porém não consigo usar o "incremento" do for pra fazer isso!

Quero que o sistema leia a linha e interprete as variáveis para fazer a expressão:

for i in $(seq 1 1 50)
do
cat $smhead split$i $smtail > $nome_sitemap$i
done


Eu consigo fazer o for de 1 até 50 com incremento unitário.
Os arquivos: $smhead e $smtail são "estáticos", ou seja, o nome deles é sempre o mesmo...
O problema está nos arquivos: split$i e $nome_sitemap$i - eu desejo que o shell script leia a variável em 2 partes:

split$i deverá ser lido como:
split1
split2
split3
...

$nome_sitemap$i deverá ser lido como:
sitemap1
sitemap2
sitemap3
...
(onde sitemap vem da primeira variável... e o número "1" vem da segunda variável.

---------------------------------------------------------------------------------------------------------------------
Boa noite cebaldocchi.
Se, $smhead e $smtail são estáticos, para que criar a variável?
O mesmo ocorre com $nome_sitemap ....
Bom, deve ter suas razões . . .
Troquei o cat por um echo, para testar, segue:

for ((X=1;X<=50;X++));do
echo "cat smhead split$X smtail > sitemap$X"
done
----------------------------------------------------------
SAÍDA:
cat smhead split1 smtail > sitemap1
cat smhead split2 smtail > sitemap2
cat smhead split3 smtail > sitemap3
.
.
.


Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos, o que incentiva a continuar colaborando/ajudando/participando/compartilhando . . . :)

Att.:
Marcelo Oliver

3. Re: Tratando Variáveis no Shell?! [RESOLVIDO]

Carlos Eduardo
cebaldocchi

(usa Ubuntu)

Enviado em 22/03/2016 - 00:47h

Boa noite Marcelo,
tudo bem?

É exatamente isso que eu quero... porém usando o comando "echo" ele joga na tela a linha exatamente do jeito que eu quero... porém o que eu realmente desejo é executar essa linha, entendeu. Eu desejo que o programinha Shell rode essa linha ao invés de escrevê-la na página...

(eu poderia jogar a saída num arquivo externo e mandar rodar o que é uma opção... mas se conseguir fazer direto, melhor).

Att.
Carlos


4. Solução!

Carlos Eduardo
cebaldocchi

(usa Ubuntu)

Enviado em 22/03/2016 - 03:42h

Agradeço a ajuda... resolvi o problema da seguinte forma:

for i in $(seq 1 1 49)
do
cat $smhead split$i $smtail > sitemap-$i.xml
done


O comando seq 1 1 50 faz a contagem de 1 até 50 com incremento unitário! Para incremento de "2" use: seq 1 2 50.
O comando $(seq 1 1 49) faz com que o resultado da expressão retro-alimente o laço for na variável $i. (ele executa o laço for com cada um dos resultados do comando seq).

Por fim o problema foi resolvido utilizando direto o nome do arquivo com a variável no meio do nome!
sitemap-$i.xml

Onde o resultado seria:

cat sitemap-head.xml split1 sitemap-tail.xml > sitemap-1.xml
cat sitemap-head.xml split2 sitemap-tail.xml > sitemap-2.xml
cat sitemap-head.xml split3 sitemap-tail.xml > sitemap-3.xml

Lembrando que o resultado obtido foi a EXECUÇÃO do comando inteiro... ou seja:
O comando cat pegou os 3 arquivos declarados e juntou em um único arquivo!
Ou seja, na primeira linha após executar ele gerou um arquivo de saída chamado: sitemap-1.xml - gerado à partir desses 3 arquivos: sitemap-head.xml split1 sitemap-tail.xml


5. Re: Tratando Variáveis no Shell?! [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/03/2016 - 08:59h

cebaldocchi escreveu:

Boa noite Marcelo,
tudo bem?

É exatamente isso que eu quero... porém usando o comando "echo" ele joga na tela a linha exatamente do jeito que eu quero... porém o que eu realmente desejo é executar essa linha, entendeu. Eu desejo que o programinha Shell rode essa linha ao invés de escrevê-la na página...

(eu poderia jogar a saída num arquivo externo e mandar rodar o que é uma opção... mas se conseguir fazer direto, melhor).

Att.
Carlos

--------------------------------
Bom dia cebaldocchi.
Coloquei o echo somente para testes....
Depois testei com o cat, funciona a contento, como esperado ...
É só tirar o echo e as aspas ...

abç.:
Marcelo








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts