Existem três erros óbvios:
- Na linha
else s=-50 m=-50 h=+1 fi
, a palavrafi
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 comandofi
. Se você tiver que executar essa linha, verá um errobash: fi: command not found
. Coloquefi
em uma linha própria (ou coloque um;
antes). -
[ "" < 50 ]
é o mesmo que[ "" ] < 50
- é o comando[ … ]
(que também pode ser escritotest
) com o único argumento""
e com um redirecionamento de entrada do arquivo50
. 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'
.