Есть три очевидные ошибки:
В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поставьте перед ней ;). [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть записана test) с единственным аргументом "$3" и с перенаправлением ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойной скобкой является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри. ["$2" < 50 ] не хватает места после открытия скобки.Также обычным соглашением в сценариях оболочки является посылка символа новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.
#!/bin/bash
declare -i s
declare -i m
declare -i h
if (( $3 < 50 )); then
s=$3+10 m=$2 h=$1
elif (( $2 < 50 )); then
s=$3-50 m=$2+1 h=$1
else
s=$1-50 m=$2-50 h=$1+1
fi
echo "$h:$m:$s"
P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.