fim prematuro do arquivo [RESOLVIDO]

1. fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 16:08h

Estou quebrando a cabeça aqui e ainda não consegui enxergar o problema. Estou recendo o erro:

linha 164: erro de sintaxe: fim prematuro do arquivo

Procurei na net e não encontrei nada... alguém mais experiente pode dar uma dica? http://goo.gl/sCypZ

O script aqui: http://paste.ubuntu.com/651924/




  


2. Re: fim prematuro do arquivo [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 25/07/2011 - 16:16h

Faltou um "done" no último "read", não? Pra tirar a dúvida, execute o seu script dessa forma:

# bash -x script.sh


3. Re: fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 16:51h

mas o read precisa de done? quando eu coloco aqui da erro de sintax:

linha 164: erro de sintaxe próximo do `token' não esperado `done'

Executei da forma que descreveu e deu a mesma coisa



4. Re: fim prematuro do arquivo [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 25/07/2011 - 16:55h

Desculpe, realmente não precisa. Mas quando vc executa o comando q t passei (sem o "done"), ele mostra alguma coisa d diferente?


5. Re: fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 17:04h

mostra apenas a checagem que fiz no começo com o ping

++ ping -c 1 google.com
++ grep unknown

limpa a tela e depois o erro:

linha 164: erro de sintaxe: fim prematuro do arquivo

Deve mostrar algo mais , mas é bem rápido, eu uso muitos "clear"s no arquivo, acho que isso pode anular a saída do comando -x não?



6. Re: fim prematuro do arquivo [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 25/07/2011 - 17:08h

Com certeza. Deixe-os comentados e tente d novo.


7. Re: fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 17:20h

Pois é, agora sim, mas ainda não entendi:

retorno:

++ ping -c 1 google.com
++ grep unknown
+ net=
+ '[' = 'ping: unknown host google.com' ']'
a.sh: linha 19: [: =: esperado operador unário
a.sh: linha 164: erro de sintaxe: fim prematuro do arquivo

linhas 18 e 19:

net= $(ping -c 1 google.com | grep unknown)
if [ $net = "ping: unknown host google.com" ]; then



8. Re: fim prematuro do arquivo [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 25/07/2011 - 17:33h

Deixe assim o seu if:

if [ $net -eq "ping: unknown host google.com" ]; then

Eu acho q assim funciona.


9. Re: fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 18:14h

Bom, pelo que eu sei "-eq" é a mesma coisa que "=", testei aqui e deu o mesmo erro...

retirei a função pra ver no que dava, mas o erro do "fim prematuro" continua, veja:

+ LOGPATCH=/var/log/osvc.log
++ id -u
+ '[' 0 '!=' 0 ']'
a.sh: linha 158: erro de sintaxe: fim prematuro do arquivo


Com a função, a saída completa do comando:

+ LOGPATCH=/var/log/osvc.log
++ id -u
+ '[' 0 '!=' 0 ']'
+ echo
++ ping -c 1 google.com
++ grep unknown
+ net=
+ '[' -eq 'ping: unknown host google.com' ']'
a.sh: linha 19: [: -eq: esperado operador unário
a.sh: linha 164: erro de sintaxe: fim prematuro do arquivo




10. comparação de valores

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 25/07/2011 - 18:21h

ola... percebi uma coisa nesse script...
primeiro que ele é bem legal rsrs
segundo, é que o shell script (pode não parecer) mas em certas ocasiões diferencia "inteiro" de "string" por exemplo:

if [ $opc = começar ]; then

aqui vc esta comparando duas strings $opc e começar, mas para que essa comparação seja valida vc tem que seguir algumas regras.

o sinal de "=" serve somente para atribuir valores da direita para a esquerda Ex:
$ var=1
$ echo $var
$ 1
$ var="hudy"
$ echo $var
$ hudy

o comando if usa "[" "]" para efetuar os testes e comparações
e dentro dele, se vc quiser comparar a variável $opc com a string começar, vc deve primeiramente usar a aspas ("") na string e o sinal de igual 2x (==)ficando assim:
if [ $opc == "começar" ]; then

se a expressão fosse com numero inteiros, ficaria assim:
if [ $opc -eq 1 ]; then

bom, acredito que isso possa tirar suas duvidas

e recomendo que vc de uma olhada nos "operadores lógicos do shell" para que vc possa ter um melhor domínio na programação de seus scripts faloww


11. Re: fim prematuro do arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/07/2011 - 18:47h

@hudyfx Opa amigo, agradeço!

Nem tinha notado esse erro. eu conheço algumas linguagens mas shell script estou tendo o primeiro contato agora, eu não li nada sobre, só estou fazendo e testando... Eu conheço bastante batch script (do windows) que tem algumas coisas parecidas, então só estou adaptando os comandos. Agora essas condições if são bem diferentes, ai eu começo a confundir bash com batch, com c, com php e vira aquela meleca kkk

Sua explicação foi bem clara, acho que isso já sana as minhas dúvidas sobre as condições if. Você é professor ou algo do tipo? hehe Essa explanação foi bem legal, gostei bastante.

Esse script ainda tem muita coisa pra concertar/incluir , só que esse erro do "fim prematuro" me pegou de jeito rs

EDIT:
Corrigi os ifs ...

if [ "$net" == "ping: unknown host google.com" ]; then

if [ $opc == "começar" ]; then

Fiz algumas alterações e revisões no script também, mas continuo recebendo a mensagem "fim prematuro bla bla bla"
não sei mais o que pode ser


12. fim prematuro do arquivo

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 26/07/2011 - 01:49h

cara... não sou professor e sim apena mais um nerd que não sabe fazer outra coisa alem de programar rsrsrs
ok... eu até agora eu não tinha me dado conta de uma porção de coisa que o seu script deveria fazer e não esta fazendo...
tomemos com referencia essa linha:

net= $(ping -c 1 google.com | grep unknown)

agente pode aprender um mote de coisa com essa linha de comando.
1º na atribuição de dados em uma variável não exite espaço, por exemplo:
$ var= hudy
se vc executar essa linha no shell ele vai retornar um erro dizendo "hudy: comando não encotrado".
o correto seria:
$ var=hudy
$ echo $var
hudy
como avia dito anteriormente, a palavra 'hudy' é uma string, porem se quisermos atribuir varias palavras dentro de $var, deveremos usar aspas dupla " ".
$ var="O Guia do mochileiro das galaxias"
$ echo $var
O Guia do mochileiro das galaxias

bom tudo apenas pra dizer que não tem espaço depois do sinal de "=" rsrs

net=$(ping -c 1 google.com | grep unknown)

2º posso lhe dizer que a ideia do comando dentro de $() é até boa porem ela nunca daria certo por causa das características do comando "ping".
O ping usa duas saídas de erro a 1 para retorno positivo e a 2 para negativo por tanto, para que a variável receba a saída de erro do ping vc deve fazer assim:

net=$(ping -c 1 google.com 2>/dev/stdout | grep unknown)

o resultado passa pela entrada padrão (1) fazendo com que seja gravado dentro da variável.
bom... eu geralmente uso crase ao invés de $() ficando assim

net=`ping -c 1 google.com 2>/dev/stdout | grep unknown`

no fim das contas da no mesmo.. apenas digito menos rsrsr....

deve ter mais algumas coisa para observar porem até o momento só tive tempo de olhar isso... espero que te ajude por enquanto falowww



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts