There are four things in your script that you should consider changing. Two of them are syntax related:
- Assignments can not have spaces around
=. You have this error in two places. - To do an arithmetic less than or equal test, use
-lt, not<=. The<=is an input redirection from a file called=. This is where your "no such file" error comes from.
The other two are:
- Always double quote expansion. Use
echo "$n"orprintf '%s\n' "$n"instead ofecho $n. Use[ "$n" -lt 99 ]instead of[ $n -lt 99 ]. In the general case, the shell would otherwise split the variable's value into words and apply filename globbing rules to each of those words. - You don't need
declare -ihere. Declaring a variable as integer inbashis very rarely needed.
Additionally, since you get a "declare not found" error, you are likely not running the script with bash. Do consider making your script executable and also don't specify an explicit interpreter on the command line when you run your script (this would make the #! line take effect).
See also:
- When is double-quoting necessary?
- The https://www.shellcheck.net/ web site is useful for checking shell script syntax.