atribuir valor à uma variavel [RESOLVIDO]

1. atribuir valor à uma variavel [RESOLVIDO]

jorge
katzer

(usa Ubuntu)

Enviado em 05/03/2012 - 17:06h

tento atribuir o valor 'diferentes' que vem do comando diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}' para uma variavel de nome diferentes, mas quando dou o echo nesta variavel ocorre erro.


diferentes=diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}'

echo $diferentes

erro : linha 107: -q: comando não encontrado

o comando em si diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}' retorna a palavra diferentes pois aquivo e arquivonovo são realmente diferentes. O que desejo é comparar posteriormente assim.

if [ $diferentes == "diferentes" ]; then
.....





  


2. MELHOR RESPOSTA

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 05/03/2012 - 17:11h

katzer escreveu:

diferentes=diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}'



Quando vc definir uma variável em ShellScript use a mesma entre parenteses, iniciando-a com um cifrão:


diferentes=$(diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}')


3. novo detalhe

jorge
katzer

(usa Ubuntu)

Enviado em 06/03/2012 - 17:00h

A solução funcionou com sucesso. Mas observo o seguinte quando a variavel $diferentes tem um valor (que no caso esse valor é 'diferentes') não ocorre nenhum problema, mas quando não tem um valor, ou seja, ela está vazia (neste caso os arquivos de comparação são iguais) ele reporta uma mensagem, mesmo assim o programa funciona mas esta mensagem perturba.

./final_sisinfo.sh: linha 108: [: ==: esperado operador unário

isso ocorre porque a variavel $diferentes não tem valor abaixo está como eu fiz

for arquivo in $(ls -1 | egrep '*10.24.208.*.txt')
do
if [ $arquivo == "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`".txt ]; then
# neste caso os arquivos tem mesma data
#atribui o nome do arquivo criado (Ex: 06032012_10.24.208.144um.txt à uma variável
arquivonovo="`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`"um.txt
cat final.txt > $arquivonovo
#verifica se os aquivos são diferentes
diferentes=$(diff -q $arquivo $arquivonovo | egrep 'diferentes' | awk '{print $7}')
if [ $diferentes == "diferentes" ]; then
#entra aqui se os arquivos são diferentes
echo "Arquivos de mesma data diferentes. Gerando relatorio de diferenças"
diff -y $arquivo $arquivonovo > "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`"_alterado.txt
echo "removendo arquivo anterior"
rm $arquivo
echo "renomeando arquivo *um.txt"
mv $arquivonovo "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`".txt
else
#os arquivos não são diferentes, basta atualizar o arquivo anterior
echo "Arquivos de mesma data NÃO diferentes. Substituição do arquivo anterior pelo arquivo atualizado"
echo "renomeando arquivo *um.txt"
#se os arquivos não são diferentes apenas atualiza o ultimo
mv $arquivonovo "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`".txt
fi
else
#neste caso os arquivos tem datas diferentes
#atribui o nome do arquivo criado (Ex:06032012_10.24.208.144um.txt à uma variável
arquivonovo="`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`".txt
cat final.txt > $arquivonovo
#verifica se os aquivos são diferentes
diferentes=$(diff -q $arquivo $arquivonovo | egrep 'diferentes' | awk '{print $7}')

if [ $diferentes == "diferentes" ]; then
echo "Arquivos de datas diferentes. Gerando relatorio de diferenças"
diff -y $arquivo $arquivonovo > "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`"_alterado.txt
echo "removendo arquivo anterior"
rm $arquivo
else
echo "Arquivos de datas diferentes SÃO iguais. Substituição do arquivo anterior pelo arquivo atualizado"
echo "renomeando arquivo *um.txt"
#se os arquivos não são diferentes apenas atualiza o ultimo
mv $arquivo "`date +%d%m%Y`_`/sbin/ifconfig | sed -n '2 p' | awk '{print $3}'`".txt
fi
fi
done


mandei o código todo mas o problema esta na comparação if [ $diferentes == "diferentes" ]; then quando $diferentes está 'vazia'


4. Re: atribuir valor à uma variavel [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 06/03/2012 - 18:36h

katzer escreveu:

A solução funcionou com sucesso. Mas observo o seguinte quando a variavel $diferentes tem um valor (que no caso esse valor é 'diferentes') não ocorre nenhum problema, mas quando não tem um valor, ou seja, ela está vazia (neste caso os arquivos de comparação são iguais) ele reporta uma mensagem, mesmo assim o programa funciona mas esta mensagem perturba.

./final_sisinfo.sh: linha 108: [: ==: esperado operador unário

isso ocorre porque a variavel $diferentes não tem valor abaixo está como eu fiz

mandei o código todo mas o problema esta na comparação if [ $diferentes == "diferentes" ]; then quando $diferentes está 'vazia'



Você pode validar a variável "$diferente" para ver se a mesma está vazia:


test -z $diferente && echo "VAZIA" || echo "NAO VAZIA"


Ou caso queira apenas desprezar o erro da condição if, vc pode usar:



if [ $diferentes == "diferentes" ] 2> /dev/null; then

...
...
...

fi




5. Re: atribuir valor à uma variavel [RESOLVIDO]

Kayke Loran de Amorim Teixeira
kayketeixeira

(usa Ubuntu)

Enviado em 21/11/2015 - 18:48h

Caramba cara, ajudou bastante, muito obrigado!


6. SOLUÇÃO PERFEITA

Abraão
abrtrabuco

(usa CentOS)

Enviado em 14/03/2017 - 10:47h

alexandregms escreveu:

katzer escreveu:

diferentes=diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}'



Quando vc definir uma variável em ShellScript use a mesma entre parenteses, iniciando-a com um cifrão:


diferentes=$(diff -q $arquivonovo $arquivo| egrep 'diferentes' | awk '{print $7}')



Velhas respostas, boas soluções.

Era exatamente o que estava precisando. Obrigado cara !!!!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts