shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script com erro [: -eq: unary operator expected


From: Bruno Gola
Subject: Re: [shell-script] Script com erro [: -eq: unary operator expected
Date: Tue, 14 Nov 2006 01:30:44 -0200

Explicando o problema apenas, "unary operator expected", ou seja um operador
UNARIO era esperado, um operador unário é aquele que necessita de APENAS 1
operando (como -z que testa se a string tem tamanho 0) isso significa que o
if [ ] recebeu apenas 1 dos argumentos.

A causa mais provável no exemplo do Weder seria, como ele mesmo disse, pode
ser uma das váriaveis que estão sendo testadas não tenha sido atribuida (ou
seja, é igual a nada), nesse caso o if que devia ser if [ $VAR1 -eq $VAR2 ]
vai ficar (supondo que VAR1 esta vazia) assim if [ -eq $VAR2 ], como o
operador -eq é um "binary operator" (necessita 2 operandos) e para o if
temos apenas 1 operando, ele vai lançar um erro dizendo que era esperado um
operador que lide com apenas um operando.

A solução do Alexandre de proteger com ASPAS neste caso especifico não
adianta porque -eq precisa de dois inteiros (números), e se colocar aspas o
bash interpretará como string.

Espero não ter confundido ninguém hehehehe :)

[]'s,


On 11/13/06, Fernando Ortiz <address@hidden> wrote:
>
>   Weder,
>
> Eu ja tive esse problema, e depois de muito pensar vi que era a
> condicional
> IF que causava isso mas não consegui descobrir o motivo do erro, mas no
> meu
> caso não impedia que a condicional funcione.
> Para não aparecer o erro coloque o "2>&-" no FI
>
> if [ $MES -eq $MES_AT ]
> then
> TOTAL_DIAS=$(expr $DIA_AT - $DIA)
> echo $TOTAL_DIAS
> fi 2>&-
>
> Ve se resolve. ;-)
>
> abs
> Fernando Mello
>
> Em 13/11/06, weder_feliciano <address@hidden<weder_feliciano%40yahoo.com.br>>
> escreveu:
> >
> > Estou fazendo um script pra saber quanto tempo cada maquina na rede
> > está ligada e para isso faço alguns calculos de acordo com a saida de
> > logs das máquinas, porém estou com o erro [: -eq: unary operator
> > expected, segue o script abaixo
> >
> > #!/bin/bash
> >
> > # Variaveis a serem iniciadas
> > DIA_AT=`date +%d`
> > MES_AT=`date +%m`
> > ANO_AT=2006
> >
> > cat
> > /usr/local/snmp/Consultas_snmp/Geral/Tempo_ocioso/relatorio_off.txt |
> > egrep '(^Nome|^Cliente|^Projeto|^IP|^Gerente|desligado)' |\
> > while read info
> > do
> > DIA=`echo $info | grep desligado | awk '{print $6}' | cut -d/ -f1`
> > MES=`echo $info | grep desligado | awk '{print $6}' | cut -d/ -f2`
> > ANO=`echo $info | grep desligado | awk '{print $6}' | cut -d/ -f3`
> >
> > if [ $MES -eq $MES_AT ]
> > then
> > TOTAL_DIAS=$(expr $DIA_AT - $DIA)
> > echo $TOTAL_DIAS
> > fi
> >
> > A Saida do comando para executar o laço é:
> > Nome: E-BR-000-000A-Desenvolvimento-Solaris9
> > Cliente: Interno
> > Projeto: Teste Internos
> > IP: 172.16.7.151
> > Gerente: Robson
> > O servidor está desligado desde 27/10/2006
> >
> > Minha lógica seria pra comparar o mês, se for igual só calcula os
> > dias, no caso acrescentari um else para calcular mes e dias depois,
> > mas quero fazer funcionar a primeira parte antes.
> >
> > Weder
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Bruno Fialho Marques Gola <address@hidden>
http://www.brunogola.com.br
Cel: (11) 9294-5883


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]