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'