Existem três erros óbvios:
- Na linha
else s=-50 m=-50 h=+1 fi, a palavrafinã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. Coloquefiem 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-ltou 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' .