There are three obvious errors:
- On the line
else s=$1-50 m=$2-50 h=$1+1 fi, the word
fi is not treated as a keyword, because it is not the first word in the command. To the shell, this looks like three assignments that apply to the command
fi. If you ever got to execute this line, you'd see an error
bash: fi: command not found. Put
fi on a line of its own (or put a
; before it).
[ "$3" < 50 ] is the same as
[ "$3" ] < 50 — it's the command
[ … ] (which can also be written
test) with the sole argument
"$3", and with an input redirection from the file
50. Either use the numeric comparison operator
-lt, or use an arithmetic instruction
(( … )). The single bracket construct is an ordinary built-in command, so special characters such as
< retain their normal meaning. The double parenthesis construct is special syntax, and you can use
< as a numeric comparison operator inside.
["$2" < 50 ] is missing a space after the opening bracket.
Also the usual convention in shell scripts is to put a newline after
else. Furthermore, instead of an
else block that consists entirely of an
if statement, you should use
elif. And please indent consistently.
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
s=$1-50 m=$2-50 h=$1+1
P.S. I haven't reviewed your logic. You seem to be looking for
date +%T -d 'now + 10 seconds'.