“erro de sintaxe: fim de arquivo inesperado” script simples

2

Eu preciso de ajuda para um roteiro bem simples, eu não entendo se a culpa é. O script:

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "" < 50 ]; then s=+10  m=  h=
        else if ["" < 50 ];
                then s=-50  m=+1  h=
                    else s=-50  m=-50  h=+1 fi 
fi 

echo "$h:$m:$s"

O script adiciona 10sc ao tempo que inserimos.

Eu recebo esta mensagem de erro: "sub_change_dirrect: linha 14: erro de sintaxe: fim de arquivo inesperado"

    
por Sam 03.06.2012 / 14:41

2 respostas

3

Existem três erros óbvios:

  • Na linha else s=-50 m=-50 h=+1 fi , a palavra fi não é tratada como uma palavra-chave, porque não é a primeira palavra no comando. Para o shell, isso parece com três atribuições que se aplicam ao comando fi . Se você tiver que executar essa linha, verá um erro bash: fi: command not found . Coloque fi em uma linha própria (ou coloque um ; antes).
  • [ "" < 50 ] é o mesmo que [ "" ] < 50 - é o comando [ … ] (que também pode ser escrito test ) com o único argumento "" e com um redirecionamento de entrada do arquivo 50 . Use o operador de comparação numérica -lt ou use uma instrução aritmética (( … )) . A construção de colchete único é um comando interno comum, portanto, caracteres especiais, como < , mantêm seu significado normal. A construção dos parênteses duplos é uma sintaxe especial e você pode usar < como um operador de comparação numérica.
  • ["" < 50 ] está sem espaço após o colchete de abertura.

Além disso, a convenção usual em scripts de shell é colocar uma nova linha depois de then e else . Além disso, em vez de um bloco else que consiste inteiramente em uma instrução if , você deve usar elif . E por favor recue consistentemente.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if ((  < 50 )); then
  s=+10  m=  h=
elif ((  < 50 )); then
  s=-50  m=+1  h=
else
  s=-50  m=-50  h=+1
fi 

echo "$h:$m:$s"

P.S. Eu não revi sua lógica. Você parece estar procurando por date +%T -d 'now + 10 seconds' .

    
por Gilles 03.06.2012 / 15:33
0

Você se esquece de um ; após a instrução fi aninhada

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "" < 50 ]; then s=+10  m=  h=
        else if ["" < 50 ];
                then s=-50  m=+1  h=
                    else s=-50  m=-50  h=+1 ;fi 
fi 

echo "$h:$m:$s"
    
por daisy 03.06.2012 / 14:59